VC++6.0 MFCです。
RS-232Cを使用した通信を行っています。
CreateFile()で取得したシリアルポートのハンドルが、
例えばプリンター用のシリアルポートだったりした場合に、
それを検出しエラーメッセージを表示したいのですが、
何か標準関数で、通信に使えるシリアルポートか判断できる
ような物はありませんでしょうか?
よろしくお願い致します。
無いですだ。
RS-232C (EIA-574) は、実際に通信してみないと相手が何かはわからない仕様。
シリアルプリンター(っつーのがあるかどうかはわからんが)がつながっているなら
スプーラがずっとポートをつかんでいるはずなので、単純に開けないはずだが。
基本的にユーザーに指定されたものを信用してやってみて
うまく繋げない時は、設定しているCOMポートに対象物が本当に繋がっているかを
確認してもらうようなメッセージを出すくらいしか無いと思います。
この辺は、ユーザーがどう対処すれば良いのかを示す事ができれば、
エラーメッセージとしてはOKだと思いますよ。
tetrapodさん、PATIOさん
ありがとうございます。
>シリアルプリンター(っつーのがあるかどうかはわからんが)がつながっているなら
プリンター用のポートではなかったようでした。
通常COM1を使っているのですが、COM3でも試したところ
CreateFile()が成功するようでしたので、
そのままですと、データを受信で失敗して、
タイムアウトエラーと表示されるのですが、
どうしてタイムアウトエラーなのか考える要因
(接続ミス?DCB構造体違が通信対象と違う?等)、を減らすために
通信を行う前に確認できたら良いなと思ったのですが、
無いのなら仕方ないですね。
「非同期(オーバーラップド)で待ち続けて、指定した時間(例えば1秒)たったら
タイムアウトとする」という方法もあるかなと思います。