C++ 在Windows 7上连接到高于10的COM端口时出现无效句柄错误
我开发了一个简单的串行端口应用程序,可以很好地处理低于10的COM端口(COM9、COM8、COM1)。但是,当我的设备连接到高于10的端口(如COM11)时,它无法连接,我会得到一个无效的\u句柄。我的代码是: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
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等简单别名上是不可用的。