C++ Boost.Asio COM端口打开返回“;参数不正确";在窗户上
我发现对于某些设备,使用Boost.Asio打开COM端口C++ Boost.Asio COM端口打开返回“;参数不正确";在窗户上,c++,windows,serial-port,boost-asio,C++,Windows,Serial Port,Boost Asio,我发现对于某些设备,使用Boost.Asio打开COM端口 boost::asio::io_service io; boost::asio::serial_port port(io); boost::system::error_code ec; port.open(serialPortName, ec); 始终返回错误在Windows上参数不正确。 问题似乎出现在中硬编码的参数中,包括\boost\asio\detail\impl\win\u iocp\u serial\u port\u se
boost::asio::io_service io;
boost::asio::serial_port port(io);
boost::system::error_code ec;
port.open(serialPortName, ec);
始终返回错误在Windows上参数不正确。
问题似乎出现在中硬编码的参数中,包括\boost\asio\detail\impl\win\u iocp\u serial\u port\u service.ipp
:
// Set some default serial port parameters. This implementation does not
// support changing all of these, so they might as well be in a known state.
dcb.fBinary = TRUE; // Win32 only supports binary mode.
dcb.fNull = FALSE; // Do not ignore NULL characters.
dcb.fAbortOnError = FALSE; // Ignore serial framing errors.
dcb.BaudRate = CBR_9600; // 9600 baud by default
dcb.ByteSize = 8; // 8 bit bytes
dcb.fOutxCtsFlow = FALSE; // No flow control
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fParity = FALSE; // No parity
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT; // One stop bit
if (!::SetCommState(handle, &dcb))
{
DWORD last_error = ::GetLastError();
::CloseHandle(handle);
ec = boost::system::error_code(last_error,
boost::asio::error::get_system_category());
return ec;
}
看起来这些参数与所有COM设备都不兼容,因此会出现错误。是否可以在串行端口初始化期间绕过该代码块,或以任何其他方式避免错误?或者唯一的解决方案是更改Boost.Asio的源代码?在极少数情况下,设备驱动程序可能是问题所在。为什么不尝试另一个USB串行转换适配器与另一家公司的接口芯片和设备驱动程序?