通过发送消息来传递字符串,接收方如何获得字符串?
- 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;