Thema: Delphi WndProc in Klasse

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#23

Re: WndProc in Klasse

  Alt 19. Jul 2003, 00:55
Netter Trick mit TCallDispatcher. Nur solltest du noch sicherstellen, das der Speicherbereich auch ausführbar ist. Ein VirtualProtect wäre also angebracht.

Delphi-Quellcode:
procedure InitDispatcher(var Dispatcher: TCallDispatcher; Self, Method: Pointer);
var
  OldProtect: Cardinal;
  AlignedAddress: Cardinal;
begin
  Dispatcher.POP_EAX := $58;
  Dispatcher.PUSH_CONST := $68;
  Dispatcher.Self := Self;
  Dispatcher.PUSH_EAX := $50;
  Dispatcher.JMP_RELATIVE := $E9;
  Dispatcher.Offset := PChar(Method) - PChar(@Dispatcher) - SizeOf(Dispatcher);

  if IsBadCodePtr(@Dispatcher) then
  begin
   // @Dispatcher auf Speicher-Seite ausrichten (4 KB)
    AlignedAddress := Cardinal(@Dispatcher) and $FFFFF000;
    VirtualProtect(Pointer(AlignedAddress), 4096, PAGE_EXECUTE_READWRITE, OldProtect);
  end;
end;
  Mit Zitat antworten Zitat