Mega Code Archive

 
Categories / Delphi / Examples
 

Callback a class

This article demonstrates how to use an instance of a class as a callback. If you wanted a windows callback to call an instance of a class, simply replace TMyClass with your classname, and TMyClass.MyCallBack with your method name. type TCallbackThunk = packed record POPEDX: Byte; MOVEAX: Byte; SelfPtr: Pointer; PUSHEAX: Byte; PUSHEDX: Byte; JMP: Byte; JmpOffset: Integer; end; var Callback: TCallbackThunk; begin inherited Create; Callback.POPEDX := $5A; Callback.MOVEAX := $B8; Callback.SelfPtr := Self; Callback.PUSHEAX := $50; Callback.PUSHEDX := $52; Callback.JMP := $E9; Callback.JmpOffset := Integer(@TMyClass.MyCallBack) - Integer(@Callback.JMP) - 5; //Call the WINAPI here, passing @CallBack at the callback proc, for example EnumSystemLocales(TFNLocaleEnumProc(@Callback), LCID_SUPPORTED); end;