【问题标题】:C++ opening a shared serial port with CreateFileC++ 使用 CreateFile 打开共享串行端口
【发布时间】: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


    【解决方案1】:

    我可以理解为什么现在没有回复了。作为记录,打开串行端口的参数很好。问题是我试图为每次读取打开相同的端口而不关闭它,所以我只是让它保持打开状态,直到我完成它。

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多