Ошибка неверного дескриптора при подключении к 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

Другие вопросы по тегам