-1

私はsendMessageとを使用replyMessageして、同じラップトップの 2 つのアプリ間で通信します。受信側では、送信者からのメッセージを受信すると、メッセージを返信します。したがって、送信者プロセスでは、MyStructLRESULT にキャストし、これを送信者アプリに返信します。レシーバー側でキャストバックしようとしましたが、これも機能します。

    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;

MyStructただし、送信側でこの LRESULT をキャストしようとすると、失敗します。

LRESULT result = SendMessage(test, WM_COPYDATA, (WPARAM)(HWND)hwndC, (LPARAM)(LPVOID)&data);
MyStruct* reply = (MyStruct*)result;//the value of reply is unreadable

送信者側で LRESULT をカスタム構造体に変換するにはどうすればよいですか?

ちなみに、整数または浮動小数点数を送信しようとしました。できます。ただし、カスタム struct を使用MyStructすると機能しません。LRESULT のサイズが よりも短いためだと思いMyStructます。この問題を解決するにはどうすればよいですか? LRESULT のサイズは 4、int のサイズも 4 です。

typedef struct msg{
int msgId;
char msgInfo[100];
}MyStruct;
4

1 に答える 1