
No.3ベストアンサー
- 回答日時:
>オープンしたポートをPCから抜いたりしたのですが、
>普通にクローズしてしまったので
COMはあんまりやったことありませんが、
それは、ポートが物理的にいきなり抜かれたからといって、
Windows上で動作していているプログラムが開いているハンドルが
いきなり無効になるわけではないからでしょう。
普通は開いているハンドルを元に、GetCommStateとかで
状態を確認してから、クローズとかをする必要がある気がします。
ステータス取得失敗の理由も恐らく、GetLastErrorなどで取れる
気がしますし。。。
この回答への補足
> それは、ポートが物理的にいきなり抜かれたからといって、
> Windows上で動作していているプログラムが開いているハンドルが
> いきなり無効になるわけではないからでしょう。
そうなんですね!
物理的に無効になれば失敗すると思っていました。
まだまだ勉強不足ですみません。
> 普通は開いているハンドルを元に、GetCommStateとかで
> 状態を確認してから、クローズとかをする必要がある気がします。
この処理も行っていませんでした。
参考になりました。ありがとうございます!
No.4
- 回答日時:
>GetCommStateなど
と書きましたが、
やるなら、別スレッドなどを起こして、
WaitCommEventなどでエラーを監視するのが一番よさそうです。
#回線のエラー状態まで調べられるみたいですし。
No.2
- 回答日時:
CloseHandleを失敗させるにはハンドル以外のものを渡すとか。
与えるパラメータが適正だったらCloseHandleでエラーになることはないんじゃないかな。
普通はCloseHandleの返値なんてみないことの方が多いと思うけど。
あとCOMポートを閉じるのに失敗というのは良く知らないけど、オープン時に占有するなら他でオープンしようとしてもできないとか、そういう状態になるんじゃないかと思う。
これを引き起こすなら手っ取り早いのはCloseHandleを呼ばないことだね。
デバッガを使ってCloseHandleを呼び出す手前でハンドルをNULLにしたら?
普通はCloseHandleの返り値は見ないんですね。
初めて知りました。
でも、もう少し勉強してみようと思います。
丁寧なご回答、ありがとうございました。
No.1
- 回答日時:
Windowsなどには成功可否しか返さない関数に対して、
GetLastErrorという拡張エラー値をとる関数が用意されています。
これで取得できたエラーコードはFormatMessage関数かnetコマンドで
メッセージを見ることができます。
GetLastErrorは直前の関数の拡張エラーを返すので、
呼び出し順序には注意が必要です。
この回答への補足
回答ありがとうございます。
GetLastError関数の存在は知っていました。
ご丁寧にありがとうございます。
ただ、私が知りたいのはそれではなく、どうやったらポートを閉じるのを失敗させることができるかなんです。
今のところ、オープンしたポートをPCから抜いたりしたのですが、普通にクローズしてしまったので・・・
説明不足ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 Windows Updateの更新ができない場合に初期化 3 2023/01/18 20:00
- Windows 10 パソコンが立ち上がりません 6 2022/10/06 00:30
- その他(OS) Windows11更新累積プログラムのインストールに必要な、ハードディスク容量? 2 2022/09/12 13:28
- モニター・ディスプレイ DisplayPort 入力のMSTハブ(Linux対応)を探しています。 Linux を2画面で作 1 2022/11/07 21:10
- UNIX・Linux DisplayPort 入力のMSTハブ(Linux対応)を探しています。 Linux を2画面で作 1 2022/11/07 20:48
- その他(インターネット接続・インフラ) 一軒家のインターネット環境について質問です。 現在一軒家に住んでいますがWiFiの速度が遅く困ってお 3 2022/11/06 00:55
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- ルーター・ネットワーク機器 家庭のWi-Fiについて 最近家で使っているWi-Fiが頻繁に遅延、切断され困っています。 状況とし 9 2023/02/23 21:08
- 工学 下記のひろゆきの主張をどうみますか? 9 2023/02/20 14:10
- ルーター・ネットワーク機器 YAMAHA RTX1210について初歩的な質問 1 2022/05/26 23:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BASP21送信エラーVB.NET
-
socket のエラー
-
MPI
-
ソケットの異常終了について
-
ヤフーショッピングでPayPay支...
-
エクセルVBA_ADO「ファイアホー...
-
SQLServerへの接続子による違い...
-
トランザクションの開始
-
ディスク上のサイズの乖離が大...
-
oracle spool SJIS → UTF-8
-
Windows版 pg_dumpの結果をログ...
-
Windows上のPostgreSQLの完全削...
-
ファイルに記述されている複数...
-
新規作成したPostgresqlデータ...
-
PostgreSQLについて教えてくだ...
-
ユーザー作成
-
Query OK, 0 rows affected
-
psql でのエラー出力について
-
PostgreSQLからSQLServerへの移行
-
ACCESS VBA;コマンドボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リコーimagioneo630 エラーs...
-
ヤフーショッピングでPayPay支...
-
socket のエラー
-
トランザクションの開始
-
SQLServerへの接続子による違い...
-
関数引数に対する制限値チェッ...
-
ソケットの異常終了について
-
エクセルVBA_ADO「ファイアホー...
-
更新不要はどういう意味なので...
-
MT4のOrderSendでエラーになり...
-
データの取り込み
-
fortranで文字列と数値が混在し...
-
マインクラフトエラー
-
行ロックをかけたい
-
エラーについて(更新)
-
FDに保存したExcelデータが読み...
-
VB6からADOを介してAC...
-
CloseHandleのエラーについて
-
HI-TECH Cのエラーについて
-
C#で大量のデータを扱うソフト...
おすすめ情報