HOOK的时候,那个回调函数怎么弄才能做成类的成员?现在回调函数不能是类成员函数,访问不了类的成员变量。郁闷。 (20分)

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

satanmonkey

Unregistered / Unconfirmed
GUEST, unregistred user!
谁知道怎么弄?
 
我不知道,帮你顶!!!
 
独立的单元,普通函数加全局对象(看看Application是如何接管消息处理的)
 
Windows 回调函数不可能直接写成类的成员函数,可以间接实现
先写个api函数,在A本函数中,再调用类的成员函数
 
to:zjan521
能具体说下吗?最好有代码

pr80:
我不能确定类的实例。所以没办法调用类的方法。
 
unit Unit1;

interface

implementation

type
THookClass = class
private
procedure ClassHookProc(..)
virtual;
end;

var
HookObj: THookClass;

stdcall procedure HookProc(..);
begin
if Assigned(HookObj) then HookObj.ClassHookProc(..);
end;

Initialization
HookObj:= THookClass.Create;
finalization
HookObj.Free;
end.
 
楼上的解决方案我用不了,我的类是被别人的程序调用的,不可能自己去HookObj:= THookClass.Create
 
回调函数不能是类成员。
我曾在directx9 sdk的demo中看到里面是这样做的:
声明一回调函数和你的类都可以访问到的变量(其实具体来说就是你的类变量),然后在
回调函数中通过这个变量来访问类成员。
比如你的类为:TMyClass,那么声明一变量:gMyClass: TMyClass,在你的TMyClass的
构造函数中给gMyClass赋值:gMyClass := Self,就是让gMyClass保存这个类的对象的
引用,然后在回调函数中通过gMyClass访问类成员:if gMyClass <> nil then ...
 
对了还要注意一点,用上面的方法的话,要保证只有该类的一个实例对象!
如果有多个,则比较难办,我也碰到过这样的问题
 
一般带回调函数的api参数中都有一个传给回调函数的参数的, 把你的类实例变量作为这个参数传给api, 那么回调时就可以访问相应的类了. 比如:
procedure HookProc(Param: DWORD)
stdcall;
begin
with Txxxxx(param) do
begin
.....
end;
end;
 
HOOK的回调好像没有这样一个参数
 
>> 我的类是被别人的程序调用的,不可能自己去HookObj:= THookClass.Create
那么总得要建立一个类对象实例吧。我好像没看懂题目,能否解释清楚一些。
 

Similar threads

回复
0
查看
992
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
913
SUNSTONE的Delphi笔记
S
后退
顶部