プロが教えるわが家の防犯対策術!

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とあるため、
可能だと思うのですが。。。
もし解決策をご存知の方おられましたら、ご教示お願い致します。

「パイプを用いたプロセス間通信について」の質問画像

A 回答 (3件)

>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はポインタではないと思うのですが...
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ご教示頂いた内容を参考に、作成し直したいと思います。

お礼日時:2009/05/31 15:53

(LPCVOID)data



(LPCVOID)&data
としてみて下さい。

この回答への補足

ご回答ありがとうございます。
(LPCVOID)data
⇒(LPCVOID)&data
とすることでWrite側はコンパイルが通りました。
しかしRead側で
Data* data;
ReadFile(hRead, (LPVOID)data, sizeof(data), &dwResult, NULL);
とポインタで受け取ろうと思ったのですが、画像の様なエラーが出てしまい、
データを受け取れません。。
聞いてばかりで本当に申し訳ありませんが、Read側でどのような実装で
データを受け取れば良いのか、ご教示お願いできませんでしょうか?

補足日時:2009/05/24 13:24
    • good
    • 0

普通のファイルI/O同様に扱えます。


Dataにキャストすれば問題ないと思います。

この回答への補足

typedef TypeData{
⇒typedef struct TypeData{
ですね。すみません。。
こちらのURLの方が分かりやすかったので、参考にしてキャストしてみました。
http://www2m.biglobe.ne.jp/~yasutaka/intro2/no_1 …

WriteFile(hWrite, szBuf, sizeof(szBuf), &dwResult, NULL)
の箇所を
Data data;
WriteFile(hWrite, (LPCVOID)data, sizeof(data), &dwResult, NULL)
にキャストし、実行しましたが下記エラーが発生しました。
>2 番目の引数を 'Data' から 'LPVOID' に変換できません。
キャストの仕方が悪いのでしょうか?お手数ですが、具体的な解決策についてご教示お願いできませんでしょうか。

補足日時:2009/05/24 00:00
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!