delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?
delphi的消息机制里,我在一个窗口里通过发送消息(PostMessage)给另一个窗口,那怎么传递字符串信息呢?
必须使用sendMessage.
sendmessage会等待接受消息完成后才继续执行,这样你的str才会被另一个窗口可靠接收。postmessage传递完消息立即返回,这样接收窗口就不一定完全接收当时传递的str.尤其是在局部变量的情况。
而进程间的数据传递好像只有用wm_copydata消息,它可以跨进程拷贝内存。
使用WM_COPYDATA传递.
发送:
Delphi(Pascal) code
procedureSendString(strMSG: string);
var
Data: tagCOPYDATASTRUCT;
pBuf: PChar;
begin
GetMem(pBuf, Length(strMSG) +1);
try
ZeroMemory(pBuf, Length(strMSG) +1);
StrPCopy(pBuf, strMSG);
Data.cbData:=Length(strMSG);
Data.dwData:=Length(strMSG);
Data.lpData:=pBuf;
SendMessage(hTargetWin, WM_COPYDATA, Integer(Self.Handle), Integer(@Data));
finally
FreeMem(pBuf);
end;
end;
接收:
Delphi(Pascal) code
procedureWMCopyData(varMSG: TMessage); message WM_COPYDATA;
procedureTForm1.WMCopyData(varMSG: TMessage);
var
Data : ^tagCOPYDATASTRUCT;
strMSG: string;beginData:=Pointer(Msg.lParam);
strMSG:=StrPas(Data.lpData);
ShowMessage(strMSG);
end;
|
请发表评论