delphi – 如何将方法作为回调传递给Windows API调用?
发布时间:2020-12-15 10:07:45 所属栏目:大数据 来源:网络整理
导读:我想将类的方法作为回调传递给WinAPI函数.这是可能的,如果可以,怎么样? 设置计时器的示例案例: TMyClass = classpublic procedure TimerProc(Wnd:HWND; uMsg:DWORD; idEvent:PDWORD; dwTime:DWORD); procedure DoIt;end;[...]procedure TMyClass.DoIt;begi
我想将类的方法作为回调传递给WinAPI函数.这是可能的,如果可以,怎么样?
设置计时器的示例案例: TMyClass = class public procedure TimerProc(Wnd:HWND; uMsg:DWORD; idEvent:PDWORD; dwTime:DWORD); procedure DoIt; end; [...] procedure TMyClass.DoIt; begin SetTimer(0,8,@TimerProc); // <-???- that's what I want to do (last param) end; 谢谢你的帮助! 编辑:目标是将此类的方法指定为回调.课外没有程序. 编辑2:我感谢你的帮助,但只要该方法没有“TMyClass”.在它的名字前面,它不是我正在寻找的.我曾经这样做,但想知道是否可以完全保持在面向对象的世界.指针魔术欢迎. 解决方法
Madshi有一个
MethodToProcedure程序.它位于“madTools.pas”中,属于“madBasic”包.如果你使用它,你应该将“TimerProc”的调用约定更改为stdcall,DoIt过程将变为,
TMyClass = class private Timer: UINT; SetTimerProc: Pointer; [...] procedure TMyClass.DoIt; begin SetTimerProc := MethodToProcedure(Self,@TMyClass.TimerProc); Timer := SetTimer(0,SetTimerProc); end; // After "KillTimer(0,Timer)" is called call: // VirtualFree(SetTimerProc,MEM_RELEASE); 我从来没有尝试,但我认为还可以尝试复制“classses.MakeObjectInstance”中的代码,以传递除TWndMethod之外的其他过程类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |