10番以上のCOM(シリアル)ポートを開く方法

COM通信を行うプログラムで、USB-シリアル変換器を使用するものがあったのですが、
USB-シリアル変換機は、挿入するUSBポートを変えるたびに、新しいCOMポート番号を作成してくれるというきわめて不合理な仕様(Windowsの仕様だと思います)になっているので、いつの間にかCOMポート番号が10以上になってしまうことがあります。

いままで動いていたプログラムが突然動かなくなった。
というレポートが来ました。
COM番号は正しく入力されているようですし、何が原因かわかりませんでした。
ちょっと引っかかったのがCOMの番号でした。
もしかしたら、COMの番号に上限があるのかも、、、

そう思って調べてみると、案の定、ありました。
こちらのページで解説されていました。

これは、Windowsのバグ仕様で、COM10以上のCOMポートを指定するには、
CreateFile(
    "\\\\.\\COM10",  /* 通信デバイスの名前のアドレス */
    fdwAccess,          /* アクセス (読み取りおよび書き込み) モード */
    0,                /* 共有モード */
    NULL,          /* セキュリティ記述子のアドレス */
    OPEN_EXISTING,    /* 作成方法 */
    0,              /* ファイル属性 */
    NULL          /* コピーする属性付きファイルのハンドル */
);

(Microsoft のページから抜粋)

のように、特別な指定方法をしなければいけないそうです。
難儀ですね。
[PR]
by isoq | 2008-03-18 18:04 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇
<< NewsGator FeedD... 次男の誕生日 >>