投稿者 ザーボン  (社会人) 投稿日時 2014/7/15 10:34:10
VBをちょっとかじった程度のレベルです。

エクセルのVisual Basic 6.0でWin32APIを用いてRS-232Cで通信するプログラムを作っています。
パソコンにシリアルポートがないのでUSB変換ケーブルで通信します。

CreateFile()でポートを開き、常時受信状態で待機し、1時間毎のデータを受信します。受信するとCloseHandle()でシリアルポートをクローズし表に書き込み、再びポートを開いて受信状態にを繰り返すプログラムです。24時間365日起動させたままです。

この状態で何かしらのエラーやESCを押すなどでプログラムが終了すると、ポートは開きっぱなしになってしまい、再び通信を開始してもCOMポートのハンドルが-1になり、ポートが開けなくなってしまいます。
こうなるとエクセルを立ち上げなおすか、USB変換ケーブルを抜き差ししないとポートが開けません。

ほとんど無知の状態からネットで調べてプログラムを完成させましたが、上記の不具合だけどうしていいかわかりません。

サブクラス化で応用すればOK!みたいなのがありましたが、もっと簡単にできないでしょうか?

今ポートを開いた際、ハンドル値を保持しておき、エラー等でプログラムが終了したら通信開始ボタンを押したタイミングで保持していたハンドル値でポートを閉じて、その後に上記プログラムが開始する様に考えていますがうまくいきません。

以上、説明が下手で申し訳ありませんがアドバイス頂けると助かります。よろしくお願いいたします。