同じラップトップの2つのアプリ間で通信するには、sendMessage
とreplyMessage
を使用します。受信側では、送信者からのメッセージを受信すると、メッセージで応答します。したがって、送信者プロセスでは、MyStruct
をLRESULTにキャストし、これを送信者アプリに返信します。私は受信側でそれをキャストしようとしました、それも動作します。私は、送信者側でMyStruct
にこのLRESULTをキャストしようとしていたときLRESULTをカスタム構造型にキャストする方法は?
PCOPYDATASTRUCT result;
MyStruct* data;
LRESULT a;
MyStruct* t;
MyStruct* reply = new MyStruct;
switch (uMessageType)
{
case WM_COPYDATA:
result = (PCOPYDATASTRUCT)addtionalData;
data = (MyStruct*)result->lpData;
reply->msgId = 10;
strcpy_s(reply->msgInfo, 100, "test reply");
a = reinterpret_cast<LRESULT>(reply);
t = reinterpret_cast<MyStruct*>(a);//when cast the LRESULT data to MyStruct back here, it succeed
ReplyMessage(reinterpret_cast<LRESULT>(reply));
break;
はしかし、それは失敗します。
LRESULT result = SendMessage(test, WM_COPYDATA, (WPARAM)(HWND)hwndC, (LPARAM)(LPVOID)&data);
MyStruct* reply = (MyStruct*)result;//the value of reply is unreadable
私は、送信者側で私のカスタム構造体にLRESULTを変換することができますか?
ちょうど途中でインターガーやフロートを送信しようとしました。できます。ただし、カスタム構造体MyStruct
を使用しても機能しません。私はそれがLRESULTのサイズがMyStruct
より短いためだと思います。この問題を解決するには? LRESULTの大きさは、int型のサイズは
typedef struct msg{
int msgId;
char msgInfo[100];
}MyStruct;
SendMessage()は、WM_COPYDATAを使用するとTRUEまたはFALSEを返します。ポインターのように戻り値を扱うことができると思うのはなぜでしょうか。 –
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950(v=vs.85).aspxこのリンクをチェックすると、戻り値はLRESULTであることが示されます – firstaccount
@molbdniloアプリ間でアドレスを渡すしかし、私は新しいコピーコンストラクタを使用していませんが、まだそれをうまくキャストできません。私は両方を試してみましたが、私はこの質問に1つだけ投稿します – firstaccount