【发布时间】:2012-02-15 16:49:00
【问题描述】:
我目前正在尝试使用 Windows 实现一个串行端口读取器类(已经使用 Boost 实现了一个,希望满足平台可能没有 Boost 的可能性)。
一切似乎都运行良好,除了当我使用我的 Boost 串行端口编写器(一个单独的可执行文件)测试我的 Windows 串行端口读取器(可执行文件)时,编写器抛出一个拒绝访问异常。否则读取器会工作,因为它似乎正在读取串行端口上的任何内容,直到写入器无法再写入为止。
不管是先启动写入器还是先启动读取器,一旦读取器打开端口进行读取,写入器就无法再写入该端口。
我尝试在 CreateFile() 方法中设置不同的参数,但到目前为止无济于事,我希望以下代码 sn-p 可以工作,但它没有。
m_serial = CreateFile(
m_port,
GENERIC_READ,
FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
编写器代码可能无关紧要,但无论如何:
void writeLine(std::string line)
{
boost::asio::io_service io;
boost::asio::serial_port serial(io, m_port);
serial.set_option(boost::asio::serial_port_base::baud_rate(m_rate));
boost::asio::write(serial, boost::asio::buffer(line.c_str(), line.size()));
}
boost::system::system_error 的 .what() 是:
open: Access is denied
有什么想法吗?
我看过这里:http://www.robbayer.com/files/serial-win.pdf(很棒的文章,但没有走那么远)和http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx - 似乎应该是 dwShareMode 参数,但我无法让它工作。
编辑:我应该提到我正在使用这个串行端口模拟器http://www.eterlogic.com/Products.VSPE.html,这很可能是我遇到麻烦的原因,如果是这样,那就没关系了。将我的 Boost 阅读器与我的 Boost 编写器一起使用(来自两个单独的可执行文件)时,模拟器可以正常工作。
【问题讨论】:
标签: c++ boost serial-port boost-asio