質問: ### 前提・実現したいこと VisualStudio2008にてC++でシリアル通信をしたいと思っています。 ### 発生している問題・エラーメッセージ WriteFile関数をどのように使用すればよいのかが分かりませんでした。 下記のサイトで参照した部分です。 ``` WriteFile(comPort, sentData, lengthOfSent, &numberOfPut, NULL); ``` 特に、二番目からの引数の意味がいまいち分かりません。MSDNの説明欄に書いてあった データバッファ 書き込み対象のバイト数 書き込んだバイト数 オーバーラップ構造体のバッファ などの意味もいまいちよく分からず、どのような型の数字を入れれば見当がつきません。 どのようなデータを入れればよいか、是非教えて頂く思っています。 ちなみに、送信したいデータはfloat型の数1つです。 ### より詳細な情報 参照したサイト(http://www.salutesound.com/~oss_winapi232.html) ### 補足情報 LeapMotinoとアルディーノをシリアル通信で通信させたいと思い、このような疑問にぶつかりました。 よろしくお願いいたします。
回答: WindowsAPIを利用してのシリアル通信は、以下が参考になるかと思います。 WindowsとPIC間でシリアル通信するサンプルソースがあります。 RS232C シリアル通信 なお、シリアル通信ではfloat型のようなバイナリを直接通信するのは避けた方がよいです。 送受信の環境間でfloat型のサイズやエンディアンが異なると正しく扱えないからです。 よって、たとえば`<123.45>`のような文字列で通信します。 ここで`<`と`>`はデータの区切りを表す文字で、受信側で、データ先頭と終端が判定できるようにします。 これにより、データ欠けがないかや受信完了→次の処理などの動作制御ができるようになります。 ちなみに、第五引数`OVERLAPPED`は、主に非同期に送受信したい場合に利用しますが、通常はNULLでよいでしょう。 以下は`OVERLAPPED`利用サンプルの掲載ページですが、ソースへのリンクはないようです。 Serial Sample: Communications Demonstration.aspx)