从DLL内部通过SendMessage发送字符串

时间:2015-11-21 09:49:12

标签: delphi dll sendmessage

我有两个使用一个常见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;

1 个答案:

答案 0 :(得分:1)

您正在进程之间发送私人消息。系统不会将数据从一个进程封送到另一个进程。这是必需的,因为进程具有私有隔离的虚拟地址空间。

您正在发送过程中向内存发送指针和地址。收到该地址,但没有用,因为接收进程无法访问发送进程内存。因此需要在进程之间编组数据。

如果您希望使用消息封送进程之间的数据,则应使用WM_COPYDATA消息。