在Windows 7上连接到高于10的COM端口时出现无效的句柄错误

the*_*isu 3 c++ winapi serial-port windows-7

我开发了一个简单的串行端口应用程序,适用于低于10的COM端口(COM9,COM8,... COM1).但是当我的设备连接到高于10的端口(例如COM11)时,它没有连接,我得到一个INVALID_HANDLE.我的代码是:

comport = CreateFileA(comPortName.toAscii(), GENERIC_READ|GENERIC_WRITE,
                      FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if(comport == INVALID_HANDLE_VALUE)
{
    //Write exception code here
    connectionStatus = CONNECTION_STATUS_DISCONNECTED;
}
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?有什么解决方案吗?

Dav*_*itz 7

要到达COM端口> = 10,您可以使用驱动程序的符号链接.例如,对于COM10,它是\\\\.\\COM10.

试一试:

comport = CreateFileA("\\\\.\\COM10", GENERIC_READ|GENERIC_WRITE,
                  FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if(comport == INVALID_HANDLE_VALUE)
{
    // Write exception code here
    connectionStatus = CONNECTION_STATUS_DISCONNECTED;
}
Run Code Online (Sandbox Code Playgroud)

当然,这也适用于COM端口<10.

  • 谢谢,它的工作原理.但你能解释为什么我们需要这个COM端口> = 10? (2认同)