掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ReadFileで正しく受信データを取得するには? (ID:60921)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ひでらんさん、ご回答ありがとうございます。 ・・・ おっしゃる通りです。 初歩以前のミスでした、お恥ずかしいです。すみません。 ということで、早速WaitCommEvent関数の第三引数にOVERLAPPED 構造体(com_ob)を指定し、再度1バイトずつデータを送信してみましたところ、1バイト送信するごとにイベントがちゃんと発生しデータも受け取れていました。 続いて複数バイトを一度に送信してみたところ、また受信データが不思議なことになってしまいました・・・ 例えば16バイトのデータを一度に送信してみると、受信側で「16バイトデータがきた」ということは認識できているようなのですが、ReadFile時に受信データの中身を見てみると、今度は”最初の1〜2バイト”しかデータを正しく読込んでいないのです。以降のバイトの中身はどうなっているかというと、初期化状態のままではなく何かしらごちゃごちゃなデータが入ってきてしまっているようなのです。 ヘルプの方のWaitCommEvent関数の説明で 「hFile を開くときに FILE_FLAG_OVERLAPPED フラグをセットして、lpOverlapped に NULL 以外のポインタを渡すと、WaitCommEvent 関数は重複操作として実行されます。このとき、OVERLAPPED 構造体に手動リセットイベントオブジェクト(CreateEvent 関数を使って作成します)のハンドルを指定しておく必要があります。」 とありましたので(重複操作という意味もよくわからないのですが。。)、上記コードのwhileループに入る前に com_ob.hEvent = CreateEvent(NULL,true, false, NULL); という一文を追加してみましたが当然ながらこれだけでは動作は変わらず、更に調べたところGetOverlappedResult関数というのを使うといいのかな?とも思うのですが、そもそもヘルプの説明の意味もよく理解できず、再び途方にくれています。 それと、手動イベントオブジェクトに関してはResetEventも行わないといけないのかな?と思うのですが、リセットのタイミングもどこですればいいのかわからないのです・・・ ものわかりが悪くて大変申し訳ないのですが、この辺りおわかりになりましたらご助言・叱咤等どうかお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.