DLL 和应用程序之间的消息传递 dll 产生一个消息,在应用程序中 做处理谁给我讲讲 或给我一些资料谢谢 ,很急 。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DLL中用SendMessage()函数向 应用程序发送消息,有四个参数:1.应用程序的窗口句柄,可以在应用程序调用dll时通过函数传给dll2.消息ID,需要在dll和调用dll的程序中做相同的定义,比如 vc中 #define WM_MESSAGE1 WM_USER+100,delphi中 const WM_MESSAGE1= WM_USER+1003.4分别为wparam,lparam,将发送的消息放到这两个变量里,比如dll向应用程序发送50,就可以指定第三个参数为50应用程序想接收这个消息,就必须先定义消息const WM_MESSAGE1= WM_USER+100,然后定义消息结构,比如:typeTmyMessage = record MSGID: Cardinal; wParam: WPARAM; lParam: LPARAM;end;然后还要定义相应的消息处理过程,如下:procedure ProcessMessage(var message:TmyMessage);message WM_MESSAGE1;这样在这个过程中就可以接收消息了 ///////////你好,我下面这样做,但是收不到消息,,,请问为什么啊////////xxx.DLL///////const MyMessage =wm_user+100;type TMyMessage=record s1:pchar; s2:pchar; end;procedure xxx(); stdcall;var MyMsg:^TMyMessage;begin New(MyMsg); MyMsg.s1:='dsjfh'; MyMsg.s2:='dsfjl'; SendMessage(HWND_BROADCAST,MyMessage,123,0);end;//////////应用程序///////// const MyMessage =wm_user+100; type TMyMessage=record s1:pchar; s2:pchar; end; private procedure DecodedDataMessage(var msg:TMessage);message MyMessage;procedure TForm1.DecodedDataMessage(var msg: TMessage);var MyMsg:^TMyMessage;begin MyMsg:=Pointer(msg.WParam); showmessage('s1='+MyMsg.s1+' s2='+MyMsg.s2); Dispose(MyMsg);end;procedure TForm1.Button2Click(Sender: TObject);beginInitSystem();end; procedure TForm1.Button2Click(Sender: TObject);beginInitSystem();///错了,,是procedure xxx(); stdcall;end;是不是SendMessage(HWND_BROADCAST,MyMessage,123,0); 的HWND_BROADCAST 参数用的对吗我真的找不到原因了 只要这样做就可以了SendMessage(HWND_BROADCAST,MyMessage,123,0); 看看你的接收窗口的wndproc里是怎么写的? 应用程序调用dll的时候可以先吧handle传给dll。然后dllsendmessage就有目地了 nimittz(尼米兹---------努力升星GOGOGO) 我就是用SendMessage(HWND_BROADCAST,MyMessage,123,0); 做的,但是收不到消息xixuemao(吸血猫) 怎样把 handl传给dll呢 仔细看看我的回复:DLL中用SendMessage()函数向 应用程序发送消息,有四个参数:1.应用程序的窗口句柄,可以在应用程序调用dll时通过函数传给dll就是在dll中定义一个导出函数,其中有一个参数就是HWND类型然后在应用程序中调用这个函数不就行了另外,定义消息的结构时第一项应该是消息ID,就像我定义的那样你仔细看看我的回复,要不我就白写那么多了 在dll中不用定义消息结构,直接将要传递的信息,作为SendMessage()的后两个参数就行了 谢谢 rabbitlzx(踏雪飞鸿) 再有,我问一下,,如果有很多消息呢,,难道每个消息都要一个单独的处理过程吗可不可以把他们放到一个过程中处理呢 如何让窗体自动调整大小 数据库连接问题!! 怎样把程序缩成托盘图标 用SQL語句怎樣查詢表中編號字段(BH)第三個字母為"A"的記錄? 高分:如何直接从WDM或VFW视频设备抓图???在线等待!!!UP有分! delphi中怎样使用未注册的com对象,贴点代码好么? 手头只有个Dll。 在BDE中数据库IBLocal的用户名是SYSDBA,那它的密码是什么? 在ADOQuery中怎样将当前记录转移到一个已知内容的记录? 请问如何通过注册表更改explorer的title?谢谢 下拉框从属关系 我想创业,开小公司运转,请大家给点建议!!谢谢 如何在统计后重新出现自动编号?
1.应用程序的窗口句柄,可以在应用程序调用dll时通过函数传给dll
2.消息ID,需要在dll和调用dll的程序中做相同的定义,比如 vc中 #define WM_MESSAGE1 WM_USER+100,delphi中 const WM_MESSAGE1= WM_USER+100
3.4分别为wparam,lparam,将发送的消息放到这两个变量里,比如dll向应用程序发送50,就可以指定第三个参数为50
应用程序想接收这个消息,就必须先定义消息const WM_MESSAGE1= WM_USER+100,然后定义消息结构,比如:
type
TmyMessage = record
MSGID: Cardinal;
wParam: WPARAM;
lParam: LPARAM;
end;
然后还要定义相应的消息处理过程,如下:
procedure ProcessMessage(var message:TmyMessage);message WM_MESSAGE1;
这样在这个过程中就可以接收消息了
const MyMessage =wm_user+100;
type
TMyMessage=record
s1:pchar;
s2:pchar;
end;
procedure xxx(); stdcall;
var
MyMsg:^TMyMessage;
begin
New(MyMsg);
MyMsg.s1:='dsjfh';
MyMsg.s2:='dsfjl';
SendMessage(HWND_BROADCAST,MyMessage,123,0);
end;
//////////应用程序/////////
const MyMessage =wm_user+100;
type
TMyMessage=record
s1:pchar;
s2:pchar;
end; private
procedure DecodedDataMessage(var msg:TMessage);message MyMessage;procedure TForm1.DecodedDataMessage(var msg: TMessage);
var
MyMsg:^TMyMessage;
begin
MyMsg:=Pointer(msg.WParam);
showmessage('s1='+MyMsg.s1+' s2='+MyMsg.s2);
Dispose(MyMsg);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
InitSystem();
end;
begin
InitSystem();///错了,,是procedure xxx(); stdcall;
end;
是不是
SendMessage(HWND_BROADCAST,MyMessage,123,0); 的HWND_BROADCAST 参数用的对吗我真的找不到原因了
SendMessage(HWND_BROADCAST,MyMessage,123,0);
怎样把 handl传给dll呢
DLL中用SendMessage()函数向 应用程序发送消息,有四个参数:
1.应用程序的窗口句柄,可以在应用程序调用dll时通过函数传给dll
就是在dll中定义一个导出函数,其中有一个参数就是HWND类型
然后在应用程序中调用这个函数不就行了
另外,定义消息的结构时第一项应该是消息ID,就像我定义的那样
你仔细看看我的回复,要不我就白写那么多了
再有,我问一下,,如果有很多消息呢,,难道每个消息都要一个单独的处理过程吗可不可以把他们放到一个过程中处理呢