关于OOP(有人把他翻译成目标导向编程,晕倒)的问题(200分)

  • 主题发起人 主题发起人 CJ
  • 开始时间 开始时间
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
甬到一个键盘鼠标的记录钩子,想把他封装成类,开始是如此定义的:
Type TJournalHook = Class
private
......
function PlayProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
public
....
end;

问题是,在实现部分安装钩子的时候出现了问题:
hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);
hPlay:=SetwindowsHookEx(WH_JOURNALPLAYBACK,PlayProc,HInstance,0);
编译报:Incompatible types "regular procedure and mathod pointer",明显要让我把那两个过程分离出来。
但是,分离出来以后,我需要访问本类的各个变量——私有和公有。在OBJECT PASCAL里怎么弄呢?
要是不做成类其实也没有任何问题的,不过……
 
其实在同一个unit里,类的各个变量——私有和公有都是可以
访问的,虽然按道理私有的不能访问,但是就是可以。。。
前面带类名就可以了
 
你这样肯定是不行的,类的方法都有一个隐含的第一参数:Self
因此,你把 HookProc 传进去的时候,就实际多传了一个参数,
所以不行。
当然,也不是没有办法解决,想一下 WindowProc,注册窗口的
时候传进去那个,不也是类的方法吗?Delphi 将其进行了特殊
的处理的。
去看看 cheka 的这篇文章吧:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=584889
 
后退
顶部