如何做这种class?(100分)

  • 主题发起人 主题发起人 xwings
  • 开始时间 开始时间
X

xwings

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个mousehook 可以工作的.
现在我想把它封装到一个对象里.
结果现在有几个问题不知道如何解决.还是无法解决?.
1.class内部如何调用外部dll的函数?怎么声明?
2.hookdll需要一个窗体句柄以便发回消息. 我不想在主窗体种处理这个消息.
class是不是要创建一个handle代替啊?如何写?
3.class如何写响应消息的函数?
谢谢.
 
谢谢楼上的. 我的dll需要一个窗体句柄. 我是这样在class中定义的/
FWindowHandle:HWND;
procedure WinCallBack(var Msg: TMessage);

在create中 FWindowHandle:=AllocateHWnd(WinCallBack);
这样调用dll函数的时候 就可以 sethook(FwindowHandle,WM_MYMSG);
不过好像 消息派发不到 procedure WinCallBack(var Msg: TMessage);里面啊.
我用spy++查过了. 有自定义消息的.
请指教一下.


 
const
WM_MYMSG=wm_user+9;
type
TExternalDLL=function( para1:string;para2:integer):string;

TMyObject=class
name:string;
age:integer;
info:string;
procedure callExternalDLL(func:TExternalDLL);
procedure responseMessage( var msg:tmessage)
message WM_MYMSG;
end;


var
Form1: TForm1;

implementation
{$R *.dfm}
var
myObj:TMyObject;

function doIt(para1:string;para2:integer):string;
begin
result:='Your info is: '+
'name:'+para1+
'age:'+inttostr(para2);
end;
{ TMyObject }

procedure TMyObject.callExternalDLL(func: TExternalDLL);
begin
info:=func(name,age);
end;

procedure TMyObject.responseMessage(var msg: tmessage);
begin
showmessage('hello,response to the message WM_MYMSG');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(myObj.info);
myObj.callExternalDLL(doIt);
showmessage(myObj.info);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
msg:longword;
begin
msg:=WM_MYMSG;
myObj.Dispatch(msg);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
myObj :=TMyObject.Create;
myObj.age :=24
myObj.name :='savenight';
end;
 
谢谢. 我已经搞好了. 给分咯
 

Similar threads

后退
顶部