掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ReadFileで正しく受信データを取得するには? (ID:60927)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
レスくださったみなさん、ご親切に本当にありがとうございます。 報告が遅れてしまって大変申し訳ございませんでした。 というのは、この受信DLLコードのテスト用に使っていたデータ送信用アプリ側にもかなりバグがあることが判明いたしまして・・・^^; そちらの修正に追われておりました。 送信側を直したところ、だいぶ思うように受信ができるようになりました。 が、みなさんのお察しの通り、なぜできるようになったのかをイマイチ理解できてないのが苦しいところです・・・ >tetrapodさん 紹介していただいたページ拝見しまして、とりあえず注意点として上げられていた 【ReadFile・WriteFile時に起こり得るエラー】(OVERLAPPED構造体のoffset、offsethighの設定)については対策してみました。 類似スレの方のfAbortOnErrorなどについては http://www.madlabo.com/mad/gid/research/rs232/win32api.htm なども参考に修正中です。 >ひでらんさん GetOverlappedResultはやはり必要ですか。 ヘルプを穴が開くほど眺めてみたのですが、私の認識では「非同期イベントの処理が終わっているかどうかが確認できる関数」という感じでしょうか・・・ 使いどころがあまりよくわからなかったですが、実際のコードに追加してみたものを次のレスに書きますので、おかしなところがありましたらご指摘くださるとありがたいです。 教えていただいたキーワードでググってみましたら、自分では調べ尽くしたつもりでいましたが^^;非常に参考になりそうなページを何点か見つけられました。ありがとうございます。 それと、配列の初期化はきちんとmemsetを使うようにしました。以前の方法でも配列のメモリ内を見てみると0クリアされているようなので大丈夫かな、と思ってしまっていたのですがやはり確実に処理すべきでしたね。すみません。 ちなみに今回非同期でシリアル通信をする意義というのは、「ある程度の大きさのデータを連続して受信する時に、少なくとも受信命令の取りこぼしが無いように」ということが第一命題となっています。 受信命令はとりこぼさずとも受信データを取りこぼしていたら何の意味もないのですが・・・^^; >オショウさん ご指摘ありがとうございます。しかも受信イベントはEV_RXCHARだけでなく、もう何点か追加するつもりでしたので、こちらはきちんと対応いたしました。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.