- 締切済み
パイプを用いたプロセス間通信について
VC++2005にて下記サイトを参考にパイプを用いたプロセス間通信を行うプログラムを作成しています。 猫でもわかるプログラミング (1)第242章 匿名パイプ(サーバー側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_242.htm (2)第243章 匿名パイプ(クライアント側) http://www.kumei.ne.jp/c_lang/sdk3/sdk_243.htm サーバー側からWriteFileでデータを送信する際に、 char型配列に入ったバッファデータ「szBuf」を送信し、 クライアント側のReadFileで同じく「szBuf」で受信していますが、 構造体Data ================== typedef TypeData{ int a; int b; char c[10]; }Data; ================== のオブジェクトdataを送信するには、WriteFile及びReadFileの箇所は どのように実装すれば良いのでしょうか? MSDNにはWriteFileの引数の型はLPCVOIDとあるため、 可能だと思うのですが。。。 もし解決策をご存知の方おられましたら、ご教示お願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- burroughs6
- ベストアンサー率76% (29/38)
>Data* data; >ReadFile(hRead, (LPVOID)data, sizeof(data), &dwResult, NULL); 構造体の実体はmalloc()等で作ってありますか? 補足のコードのままだとすると、dataの中身はNULL(あるいはゴミ)になっているのでエラーになって当然です。 //////// Data* data; data = malloc(sizeof(data)); ReadFile(hRead, (LPVOID)data, sizeof(data), &dwResult, NULL); //////// あるいは、ポインタを使わずに次のようにしてもいいです。 Data data; ReadFile(hRead, (LPVOID)&data, sizeof(data), &dwResult, NULL); ※WriteFileの方も、dataはポインタではないと思うのですが...
- burroughs6
- ベストアンサー率76% (29/38)
(LPCVOID)data を (LPCVOID)&data としてみて下さい。
補足
ご回答ありがとうございます。 (LPCVOID)data ⇒(LPCVOID)&data とすることでWrite側はコンパイルが通りました。 しかしRead側で Data* data; ReadFile(hRead, (LPVOID)data, sizeof(data), &dwResult, NULL); とポインタで受け取ろうと思ったのですが、画像の様なエラーが出てしまい、 データを受け取れません。。 聞いてばかりで本当に申し訳ありませんが、Read側でどのような実装で データを受け取れば良いのか、ご教示お願いできませんでしょうか?
- BLK314
- ベストアンサー率55% (84/152)
普通のファイルI/O同様に扱えます。 Dataにキャストすれば問題ないと思います。
補足
typedef TypeData{ ⇒typedef struct TypeData{ ですね。すみません。。 こちらのURLの方が分かりやすかったので、参考にしてキャストしてみました。 http://www2m.biglobe.ne.jp/~yasutaka/intro2/no_120.htm WriteFile(hWrite, szBuf, sizeof(szBuf), &dwResult, NULL) の箇所を Data data; WriteFile(hWrite, (LPCVOID)data, sizeof(data), &dwResult, NULL) にキャストし、実行しましたが下記エラーが発生しました。 >2 番目の引数を 'Data' から 'LPVOID' に変換できません。 キャストの仕方が悪いのでしょうか?お手数ですが、具体的な解決策についてご教示お願いできませんでしょうか。
お礼
ご回答ありがとうございます。 ご教示頂いた内容を参考に、作成し直したいと思います。