dll 产生一个消息,在应用程序中 做处理谁给我讲讲 或给我一些资料谢谢 ,很急 。
解决方案 »
- Delphi DLL 的问题啊?急啊~~~!@!
- 帮我想想怎么告这黑心老板!!!!!!!!!!!
- 在Rave Report5.0中怎樣增加一個Direct Data View
- delphi二维动态数组赋值出现问题,请各位指点!!
- +++++++++这样的C/S多用户数据库系统能做得出来吗?+++++++++
- 取记录数的问题
- InstallShield 5.5 Professional Edition
- 关于网格超出的问题(100)
- delphi的MOD函数只能用于两个整数,我想在两个小数间也实现此功能,如何解决?
- D5编了一个MP3播放器,但是在我安装了东方影都后就再了不能播放了,提示 ‘无法初始化设备驱动程序’
- 我想创业,开小公司运转,请大家给点建议!!谢谢
- 如何在统计后重新出现自动编号?
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,就像我定义的那样
你仔细看看我的回复,要不我就白写那么多了
再有,我问一下,,如果有很多消息呢,,难道每个消息都要一个单独的处理过程吗可不可以把他们放到一个过程中处理呢