3

我开发了一个简单的串行端口应用程序,它适用于低于 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;
}

我的代码有什么问题?有什么解决办法吗?

4

2 回答 2

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

当然,这也适用于小于 10 的 COM 端口。

于 2012-11-02T08:40:11.900 回答
2

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

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

来源:HOWTO:指定大于 COM9 的串行端口

于 2012-11-02T08:41:47.193 回答