关于回调函数(100分)

  • 主题发起人 主题发起人 aefhh
  • 开始时间 开始时间
A

aefhh

Unregistered / Unconfirmed
GUEST, unregistred user!
我用EnuWindows函数枚举窗口,用一回调函数EnumWindosProc。
问题1.把该方法申明在窗体类方中时,编译提示Variable required,如果不在类中申明就
OK了,为什么?
2.如果申明是不用stdcall关键词,就会出现访问非法地址错误。
EnumWindows(@EnumWinProc,0);
edit1.Text :=inttostr(iWinCount);//iWinCount是记录窗口数量的
是在第二句出的问题!

求教!
 
这不奇怪啊,EnumChildWindows是个API函数,它的参数中有个回调函数
的指针。这个指针类型就规定了这个回调函数的类型不能属于某个类的方法,
而且调用方式为 CALLBACK,实际上就是Stdcall.
 
直接在implememtation里实现不就是了
 
谢谢,我的意识是想问它的内部机理。
 
1: 类方法指针 由对象指针(32位)+方法指针(32位)构成。全局的函数指针直接用32
位指针表示。显然两个指针类型不兼容。
2: stdcall 约定将所调用的方法的地址影射到当前执行程序中。否则,系统认为函数
地址为非法地址。
 
1,不但类型不符合,而且类方法还有一个隐含的参数:Aobj:TObject,
存储着当前对象的指针。所以和默认的参数个数也不样。
 
接受答案了.
 
后退
顶部