sendmessage 自定义消息 发送自定义数据(200分)

  • 主题发起人 主题发起人 sxflmandy
  • 开始时间 开始时间
S

sxflmandy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠好:
我想实现用sendmessage自定义消息发送自定义结构的数据,不用copydata,请给出发送端和接收端在memo中展现的代码,谢谢!
 
还真有点难度,我当初是这样做的。

const
WM_RECVDATA = WM_USER + 101 ;

type
PData =^Tdata;
TData = record
int Data1;
end;

procedure class.test;
var
Data : pData;
begin
new(data);
SendMessage(Handle,wm_recvdata,0,integer(data);
dispose(data);
end;

procedure RecvData(var msg:TMessage);msg wm_recvdata;

procedure class2.RecvData(var msg:Tmessage);
var
Data : pdata;
begin
Data := pdata(msg.lparam);
if assigned(data) then
begin
//操作data
end;
end;


不过一般是用一个threadlist 类来传输数据。


//将Data 存入threadlist
//发送sendmessage wm_recvdata
//处理data的释放或合放入缓冲

因为是sendmessage 是处理完成在继续。所以这样写。

如果是postmessage 则
//申请或者从缓冲中获取data
//数据处理
//存入 threadlist
//postmessage


//接收
//取Data
//处理Data
//释放或者放入缓冲
 
会不会原来这个构想就是一个错误的,一个进程不可以访问另外一个进程的内存空间,虽然地址是传过来了,可是在另外一个进程中相同的内存地址值和原来进程的内存地址中的值不是一个概念
 
跨进程用SendMessage发送你说的这种数据只能用WM_COPYDATA
 
共享内存如何?关键是我要共享的是动态数组数据,大侠有没有好的解决方案,而且当数据量大的时侯...
 
用内存映射文件是可以的,小的数据一般用copydata也就够了。
 
关键是动态数组,有点麻烦,静态结构映射都没啥问题,动态结构把我给搞晕了,请大侠们能不能给出详细两边代码(一个进程映射,一个进程读取)
 

Similar threads

后退
顶部