COM10 以上のシリアルポートのハンドルを得る方法

Posted Tue Dec 04 2012

会社で作ってる製品を,シリアル通信でリモート操作するソフトがあるんですが,なぜか通信できないことがあった.その時の覚書です.

原因は COM10 以上を指定できるようにコーディングされてなかったからでした.COM10 以上を指定するには下記のような記述が必要です.

char port[11];

memset(port, '\0', sizeof(port));

// COM10 以上を指定すると INVALID_HANDLE_VALUE
// COM9 までは下記の記述で可
// sprintf(port, "COM%d", port_number);

// COM10 以上
sprintf(port, "\\\\.\\COM%d", port_number);

HANDLE handle = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

上記のように, COM ポートを指定すると問題なく接続出来ました.

参考:

[SDK32] COM10 以上のシリアルポートを指定する方法