【问题标题】:send string via SendMessage from inside dll从 dll 内部通过 SendMessage 发送字符串
【发布时间】:2015-11-21 09:49:12
【问题描述】:

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

【问题讨论】:

标签: delphi dll sendmessage


【解决方案1】:

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

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

如果您希望使用消息在进程之间编组数据,您应该使用WM_COPYDATA 消息。

【讨论】:

  • 但是我可以很容易地传递整数值,问题来自字符串值。
  • 没错。你也可以传递一个指针。只是它指的是发件人地址空间中的内存,收件人看不到。您是否按照我的答案中的链接进行操作。
猜你喜欢
  • 1970-01-01
  • 2013-11-09
  • 2021-11-02
  • 1970-01-01
  • 2012-03-25
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多