首先是发送数据
procedure SendMsg(Msg: string);
var
DS: TCopyDataStruct;
hd: THandle;
begin
Ds.cbData := Length(Msg) + 1;
GetMem(Ds.lpData, Ds.cbData);
StrCopy(ds.lpData, PChar(Msg));
if Hd <> 0 then // 发送WM_COPYDATA消息
SendMessage(Application.MainForm.Handle, WM_COPYDATA, Application.Handle, Cardinal(@ds));
FreeMem(Ds.lpData); //释放资源
end;
然后是接收数据
procedure MyMessage(var t: TWMCopyData); message WM_COPYDATA;
procedure TMainFrame.MyMessage(var t: TWMCopyData);
var
s: string;
begin //接受消息并显示。
s := StrPas(t.CopyDataStruct^.lpData);
if memLog.Lines.Count > 1000 then
memLog.Clear;
memLog.Lines.Add(s);
AddLog(s);
end;
本文地址:[url]http://www.xszlo.com/article/2012-12-08/7612.html[/url],转发请保留这个地址,谢谢
procedure SendMsg(Msg: string);
var
DS: TCopyDataStruct;
hd: THandle;
begin
Ds.cbData := Length(Msg) + 1;
GetMem(Ds.lpData, Ds.cbData);
StrCopy(ds.lpData, PChar(Msg));
if Hd <> 0 then // 发送WM_COPYDATA消息
SendMessage(Application.MainForm.Handle, WM_COPYDATA, Application.Handle, Cardinal(@ds));
FreeMem(Ds.lpData); //释放资源
end;
然后是接收数据
procedure MyMessage(var t: TWMCopyData); message WM_COPYDATA;
procedure TMainFrame.MyMessage(var t: TWMCopyData);
var
s: string;
begin //接受消息并显示。
s := StrPas(t.CopyDataStruct^.lpData);
if memLog.Lines.Count > 1000 then
memLog.Clear;
memLog.Lines.Add(s);
AddLog(s);
end;
本文地址:[url]http://www.xszlo.com/article/2012-12-08/7612.html[/url],转发请保留这个地址,谢谢
本文介绍了一种使用WM_COPYDATA消息进行进程间数据交换的方法。具体包括发送数据的procedureSendMsg函数实现,该函数负责构造数据包并发送;以及接收数据的MyMessage消息处理函数,用于解析接收到的数据并显示。
3792

被折叠的 条评论
为什么被折叠?



