WM_COPYDATAについて

[戻る]
BOB 2002/06/18(火) 23:05:45
VC++6のMFCを使っています。
WM_COPYDATAを使ってプロセス間通信をしているのですが、
データがうまく渡りません。
WM_COPYDATAはどのようにしてプロセス間でデータの受け渡しをしているのでしょうか?

kazuma 2002/06/19(水) 00:42:42
> WM_COPYDATAを使ってプロセス間通信をしているのですが、
> データがうまく渡りません。

MSDNのWM_COPYDATAの説明に注意事項がいくつか載ってますがその辺は大丈夫でしょうか?

「An application must use the SendMessage function to send this message, 
 not the PostMessage function. 

 The data being passed must not contain pointers or other references to
 objects not accessible to the application receiving the data. 」

後は、送り先のウィンドウハンドルがうまく取得できていないとか。

BOB 2002/06/19(水) 00:51:34
相手のONCOPY関数にたどり着いているので、ハンドルもあっていると思います。
構造体でデータを渡しているのですが、それがおかしいみたいです。
あまり英語が得意ではありませんが、送ったデータは、相手が拾うまでアクセスしてはだめとい
うことでしょうか?
ポインタがおかしくなっている感じなのです。
データを投げる前はもちろん構造体の中身が正常なのを確認しています。
構造体の中身を変更しつつ、ループして何回もSendMessageしているのですが、そこでおかしく
なってしまっているのでしょうか?

kazuma 2002/06/19(水) 01:06:17
> 構造体でデータを渡しているのですが、それがおかしいみたいです。
> ポインタがおかしくなっている感じなのです。

構造体のメンバにポインタが含まれているとだめです。
(さっき書いた英文にはそんなようなことが書いてあります。)

過去ログにも同じような話がいくつかありますね。
WM_COPYDATAで検索してみてください。

PATIO 2002/06/26(水) 17:18:44
ポインタが含まれていると駄目な理由がわかれば、
自ずと理解できると思うのですが。

ウインドウズのメモリ管理に関することなのでプロセス間通信を
行っているのであれば、当然抑えておかないといけない内容ですよ。

古いスレッドには追加発言できません。