通过发送消息来传递字符串,接收方怎么获得字符串

通过发送消息来传递字符串,接收方如何获得字符串?
Delphi(Pascal) code
procedure TAAThread.Execute;
var s:string;
begin
  s:='jkchjvb';
  PostMessage(handle,WM_My,integer(s),6);
end;


用这个发送字任串,发现字符串不能太长,否则出错。所以直接发指针

Delphi(Pascal) code
procedure TAAThread.Execute;
var s:string;
begin
  s:='jkchjvb';
  PostMessage(handle,WM_My,integer(@s),6);
end;


那么现在我应该如何在接收方得到这个字符串呢?

------解决方案--------------------
Delphi(Pascal) code

procedure TAAThread.Execute;
var s:string;
begin
  s:='jkchjvb';
  PostMessage(handle,WM_My,integer(s),6);
end;

------解决方案--------------------
Delphi(Pascal) code

procedure TForm1.OnSys(var msg: TMessage);
  var pData : PChar;
begin  
  pData := PChar(msg.lparam);
  lst1.Items.Add(pData);
end;

procedure TForm1.btn1Click(Sender: TObject);
  var pData : string;
begin
  pData := '测试测试测试';
  PostMessage(Handle,WM_SYS,0,Integer(pData));
end;

------解决方案--------------------
这种情况,你需要在线程中动态开辟内存(虽然这样做不是很好,但是不会有错误)

Delphi(Pascal) code
//线程中:
procedure TAAThread.Execute;
var 
  p: Pointer;
begin
  GetMem(p, 7);
  ZeroMemory(p, 7);
  Move('jkchjvb', p^)
  PostMessage(handle,WM_My,integer(p),6);
end;


//接收部分
var
  p: Pointer;
begin
  p := Pointer(msg.LParam);
  self.mmoInfo.Lines.Add(String(p));
  FreeMem(p); // 释放
end;