0

什么是 Windows 消息权限?

在应用程序 1 中,我向应用程序 2 发布了一条消息:

PostMessage(handle, WM_LOCAL, 0, Integer(Lst));

在应用程序 2 中,消息实现:

var l: TStringList;
begin    
  ShowMessage('got 1');
  l := TStringList(Message.LParam);
  ShowMessage('got 2');
  Memo1.Clear;
  ShowMessage('got 3');

  if Memo1 = nil then
    ShowMessage('nil');

  //HERE : Access violation.
  //Memo1.Text := l.Text;
  //ShowMessage('got 4');

  Memo1.Lines.Add('good!');
  ShowMessage('got 5');

  l.Free;      
  ShowMessage('got 6');

  //Access violation Too..
  Memo1.Repaint;
  ShowMessage('got 7');

为什么会发生这种情况?

我既不能重绘备忘录,也不能访问文本属性。

4

2 回答 2

5

您不能在应用程序之间共享对象。甚至指针也会指向目的地的地址空间。
也许WM_COPYDATA将满足您复制数据的要求。

于 2013-04-08T14:39:12.613 回答
4

拥有特权的不是消息,而是进程。该功能称为用户界面特权隔离(UIPI)。此功能阻止较低完整性级别的进程将消息发送到较高完整性级别的进程。

但这不是你的问题。您的问题是每个进程都有一个单独的地址空间。因此,来自一个进程的指针在另一个进程中没有任何意义。这就是您遇到访问冲突的原因。您收到的指针指向不同进程中的内存,因此毫无意义。

您需要使用进程间通信 (IPC) 机制。例如,发送WM_COPYDATA消息,或者命名管道,或者套接字等等。

于 2013-04-08T14:41:56.787 回答