4

Delphiの2つのWindowsアプリケーション間で通信しようとしています。送信者は、WM_COPYDATAを使用してSendMessageを介してコマンドを送信します。その部分は正常に機能しています。受信者が同じ呼び出しでいくつかの結果文字列を返信することは可能ですか?それは私にとって失敗していて、次のことが今起こっていることです。

  1. 送信者はWM_COPYDATAを使用して、ブロッキング呼び出しSendMessgeを使用して受信者にコマンドを送信します。

  2. 受信者はコマンドを処理し、COPYDATASTRUCTをいくつかの結果文字列で変更します。これらの結果文字列は、送信者に返送してイベントハンドラーを終了する必要があります。

  3. 受信者の「SendMessage」関数は戻りますが、COPYDATASTRUCTの内容は変更されていません。

どうやらWindowsのメッセージングメカニズムは2つのアプリケーション間でCOPYDATASTRUCTメモリを共有していません。代わりに、コピーを作成しています。

4

2 に答える 2

6

WM_COPYDATAそれが言うことを実行します:それはソースプロセスからターゲットプロセスにデータをコピーします。ターゲットプロセスからソースプロセスにデータをコピーして戻すことはありません。双方向通信が必要な場合は、別のメッセージを反対方向に送信してください。

于 2012-03-21T00:27:43.400 に答える
5

ドキュメントを読むことを検討してください。備考セクションでは、次のルールが適用されます。

受信側のアプリケーションは、データを読み取り専用と見なす必要があります。lParamパラメーターは、メッセージの処理中にのみ有効です。受信側のアプリケーションは、lParamによって参照されるメモリを解放しないでください。SendMessageが戻った後に受信側アプリケーションがデータにアクセスする必要がある場合は、データをローカルバッファにコピーする必要があります。

于 2012-03-21T00:53:03.000 に答える