Z zjan521 Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-09 #3 独立的单元,普通函数加全局对象(看看Application是如何接管消息处理的)
P pr80 Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-09 #4 Windows 回调函数不可能直接写成类的成员函数,可以间接实现 先写个api函数,在A本函数中,再调用类的成员函数
S satanmonkey Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-09 #5 to:zjan521 能具体说下吗?最好有代码 pr80: 我不能确定类的实例。所以没办法调用类的方法。
Z zjan521 Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-09 #6 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.
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.
S satanmonkey Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-10 #7 楼上的解决方案我用不了,我的类是被别人的程序调用的,不可能自己去HookObj:= THookClass.Create
H happyjoe Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-11 #8 回调函数不能是类成员。 我曾在directx9 sdk的demo中看到里面是这样做的: 声明一回调函数和你的类都可以访问到的变量(其实具体来说就是你的类变量),然后在 回调函数中通过这个变量来访问类成员。 比如你的类为:TMyClass,那么声明一变量:gMyClass: TMyClass,在你的TMyClass的 构造函数中给gMyClass赋值:gMyClass := Self,就是让gMyClass保存这个类的对象的 引用,然后在回调函数中通过gMyClass访问类成员:if gMyClass <> nil then ...
回调函数不能是类成员。 我曾在directx9 sdk的demo中看到里面是这样做的: 声明一回调函数和你的类都可以访问到的变量(其实具体来说就是你的类变量),然后在 回调函数中通过这个变量来访问类成员。 比如你的类为:TMyClass,那么声明一变量:gMyClass: TMyClass,在你的TMyClass的 构造函数中给gMyClass赋值:gMyClass := Self,就是让gMyClass保存这个类的对象的 引用,然后在回调函数中通过gMyClass访问类成员:if gMyClass <> nil then ...
H happyjoe Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-11 #9 对了还要注意一点,用上面的方法的话,要保证只有该类的一个实例对象! 如果有多个,则比较难办,我也碰到过这样的问题
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-13 #10 一般带回调函数的api参数中都有一个传给回调函数的参数的, 把你的类实例变量作为这个参数传给api, 那么回调时就可以访问相应的类了. 比如: procedure HookProc(Param: DWORD) stdcall; begin with Txxxxx(param) do begin ..... end; end;
一般带回调函数的api参数中都有一个传给回调函数的参数的, 把你的类实例变量作为这个参数传给api, 那么回调时就可以访问相应的类了. 比如: procedure HookProc(Param: DWORD) stdcall; begin with Txxxxx(param) do begin ..... end; end;
S savetime Unregistered / Unconfirmed GUEST, unregistred user! 2004-06-13 #12 >> 我的类是被别人的程序调用的,不可能自己去HookObj:= THookClass.Create 那么总得要建立一个类对象实例吧。我好像没看懂题目,能否解释清楚一些。