我有两个使用一个常见DLL的应用程序。从应用程序“A”我发送了一个带有字符串参数的消息,如下所示
txt := 'Test String'
SendMessage(Handle, MyMessage, 0, lParam(PChar(txt)));
并且在同一个DLL中我有另一个函数来读取该消息,但是我收到了一条空消息。我不知道我在哪里做错了。
procedure MyClass.WndMethod(var Msg: TMessage);
var
Str: string;
begin
case Msg.Msg of
MyMessage:
begin
Str := string(PChar(Msg.LParam));
ShowMessage(Str); // Empty message
end;
end;
答案 0 :(得分:1)
您正在进程之间发送私人消息。系统不会将数据从一个进程封送到另一个进程。这是必需的,因为进程具有私有隔离的虚拟地址空间。
您正在发送过程中向内存发送指针和地址。收到该地址,但没有用,因为接收进程无法访问发送进程内存。因此需要在进程之间编组数据。
如果您希望使用消息封送进程之间的数据,则应使用WM_COPYDATA
消息。