Ошибка неверного дескриптора при подключении к COM-порту выше 10 в Windows 7
Я разработал простое приложение с последовательным портом, которое отлично работает с COM-портами ниже 10 (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;
}
Что не так с моим кодом? Есть ли решение?
2 ответа
Решение
Для достижения 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", ... )
Источник: HOWTO: Укажите последовательные порты больше, чем COM9