delphi – 如何将方法作为回调传递给Windows API调用?

前端之家收集整理的这篇文章主要介绍了delphi – 如何将方法作为回调传递给Windows API调用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将类的方法作为回调传递给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之外的其他过程类型.

猜你在找的Delphi相关文章