C++ 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打开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 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串行转换适配器与另一家公司的接口芯片和设备驱动程序?