我目前想实现使用Windows串行端口读取器类(已实施一个使用Boost,要迎合该平台可能没有加速的可能性)。C++打开一个共享串行端口的CreateFile
一切似乎运作良好,除了当我用我的升压串口刻录机(一个独立的可执行文件)测试我的Windows串行端口读卡器(可执行文件),笔者抛出一个拒绝访问异常。否则读者就会工作,因为它似乎在读取串口上的任何内容,直到作者不能再写。
不要紧作家是否启动第一或阅读器首次启动时,一旦阅读器打开端口阅读,作家不能再写入该端口。
我试图在的CreateFile()方法,但无济于事到目前为止设置不同的参数,我希望下面的代码片段工作,但事实并非如此。
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()));
}
而对于提振。什么()::系统:: SYSTEM_ERROR是:
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阅读器一起使用时,仿真器按照预期工作(来自两个独立的可执行文件)。