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

C++ 在Windows 7上连接到高于10的COM端口时出现无效句柄错误,c++,winapi,windows-7,serial-port,C++,Winapi,Windows 7,Serial Port,我开发了一个简单的串行端口应用程序,可以很好地处理低于10的COM端口(COM9、COM8、COM1)。但是,当我的设备连接到高于10的端口(如COM11)时,它无法连接,我会得到一个无效的\u句柄。我的代码是: comport = CreateFileA(comPortName.toAscii(), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXI

我开发了一个简单的串行端口应用程序,可以很好地处理低于10的COM端口(COM9、COM8、COM1)。但是,当我的设备连接到高于10的端口(如COM11)时,它无法连接,我会得到一个无效的\u句柄。我的代码是:

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;
}

我的代码怎么了?有什么解决方案吗?

要访问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;
}
当然,这也适用于COM端口<10。

您需要在COM端口名前加上“\\.\”,因此它应该类似于:

  CreateFileA("\\\\.\\COM10", ... )

来源:

谢谢,它很有效。但是你能解释一下为什么COM端口>=10需要这个吗?这是个好问题。别名
COMx
似乎来自旧时代。在这段时间里,拥有超过4个COM端口的情况并不常见。以及未以即插即用方式实现的COM端口。事实上,此机制在端口名中的位数超过1时将无法工作。也许它们仍然存在是为了兼容。顺便说一句,
\\.\xxx
技巧可以访问许多设备驱动程序,这些驱动程序在COM1-9等简单别名上是不可用的。