通过发送消息来传递字符串,接收方怎么获得字符串
通过发送消息来传递字符串,接收方如何获得字符串?
用这个发送字任串,发现字符串不能太长,否则出错。所以直接发指针
那么现在我应该如何在接收方得到这个字符串呢?
------解决方案--------------------
- 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;