2012-02-15 94 views
0

我目前想实现使用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阅读器一起使用时,仿真器按照预期工作(来自两个独立的可执行文件)。

回答

0

我可以理解为什么没有出现过的答复了。为了记录,打开串口的参数很好。问题在于我试图在不关闭的情况下为每个阅读打开相同的端口,所以我只是将它打开,直到完成完成。