关于在com中发送消息的问题,请帮忙!(50分)

  • 主题发起人 主题发起人 newhand
  • 开始时间 开始时间
N

newhand

Unregistered / Unconfirmed
GUEST, unregistred user!
const
; ; ;M_GetInfo ; ; ; ; ;= WM_USER + $1001;
type
; ; ;PInfo = ^TInfo;
; ; ;TInfo = packed record
; ; ; ; ;aaa ; ;: array[0..99] of char;
; ; ;end;
procedure TUnitInfo.AddInfo(const l_info : WideString);
var
; ; Cd ; ; ; ; ; ; ; ; ;: PCOPYDATASTRUCT ;
; ; Inf ; ; ; ; ; ; ; ; : PInfo;
begin
; ; try
; ; ; ; Getmem(inf, sizeof(TInfo));
; ; ; ; strpcopy(@inf.aaa,l_info);
; ; ; ; Getmem(cd,sizeof(TCOPYDATASTRUCT));
; ; ; ; cd.dwData:=0;
; ; ; ; cd.cbData:=100 * sizeof(char);
; ; ; ; cd.lpData:=Inf;
; ; ; ; Sendmessage(l_Handle, WM_COPYDATA, 0, LPARAM(cd));//主程序可以收到 aaa变量的值
; ; ; ; //Sendmessage(l_Handle, M_GetInfo, 0, LPARAM(cd));//主程序可以接收到消息,但aaa变量值不可访问,为什么???
; ; finally
; ; ; ; Freemem(cd);
; ; ; ; Freemem(Inf) ;
; ; end;
end;
我在主程序中可以接受自定义的消息,就是无法接收从com发送来的自定义消息,
是不是在com中不能发送自定义的消息,如果可以,谁给我个成功的例子,谢谢!
 
说明:我可以收到com发来的自定义消息,但消息中的参数值是不可访问的,为什么???
 
用SendMessage发送WM_COPYDATA,操作系统做了特殊处理,就是把COPYDATASTRUCT中指定
长度的内存已经复制到其他进程的空间(也可能是通过影射,反正在对方进程是可以访问的)
但是对于其他消息,系统是不做处理的,win32不同进程各自有自己的内存空间,
所以一个进程拿到别的进程的指针是没用的,是不能访问的
 
这么说,进程间通讯只能用WM_COPYDATA消息了
 
WM_COPYDATA只是其中一个选择,你可以选择其他的方法,比如长度不大的字符串可以用原子ATOM
可以通过剪贴板之类等等,不过WM_COPYDATA是比较方便的
 
to pipi.
我要如何在com接收其他程序发来的消息,
请看:http://www.delphibbs.com/delphibbs/dispq.asp?lid=908234
谢谢
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
636
import
I
I
回复
0
查看
583
import
I
后退
顶部