C++使用CreateFile打开共享串行端口
C++ opening a shared serial port with CreateFile
我目前正在尝试使用Windows实现一个串行端口读取器类(已经使用Boost实现了一个,希望满足平台可能没有Boost的可能性)。
所有操作似乎都很好,除了当我使用Boost串行端口写入程序(一个单独的可执行程序)测试我的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()));
}
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编写器时(从两个独立的可执行文件中),模拟器可以正常工作。
我能理解为什么现在没有回复。记录在案,打开串行端口的参数是正确的。问题是,我试图在不关闭的情况下为每次读取打开同一个端口,所以我一直保持打开状态,直到我完成读取。
- Qt Q串行端口未编程设备未关闭
- 在 linux c++ 中没有通过串行端口发送的数据
- 检查串行端口Linux中是否有传入数据(cbInQue for linux)
- 在不传输的情况下更改 Win32 中的串行端口波特率
- 增强 ASIO 和串行端口异步读取
- 串行端口写入究竟如何从缓冲区实际写入数据?
- 如何将参数这些串行端口传递到函数中
- 从 C/C++ 访问 Android 中的串行端口
- Qt两个串行端口发送和接收
- 通过串行端口从GPS传感器读取
- 提升 asio 串行端口"end of file"
- 通过串行端口发送多个值
- 与QSerialPort配合使用的串行端口仿真
- 如何通过boost::asio和shared_ptr创建串行端口
- 串行端口编码
- 使用来自串行端口的字符串数据来操作振镜扫描仪在更高的速度下会出错
- 写入和读取十六进制 TRAM QT 串行端口
- Qt串行端口数据接收
- Qt modbus 串行端口流量控制处理
- C++使用CreateFile打开共享串行端口