Einzelnen Beitrag anzeigen

Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#9

AW: Ist im Prozedurzeiger eine Klasse drin?

  Alt 4. Feb 2011, 14:51
Das geht aber nur, da der Speicher der Application-Instanz zufällig hinter dem Programmcode und der Speicher für die zu testende Instanz zufällig hinter der Application.Instanz im "RAM" liegt ... davor ist aber auch noch genug Platz.
Da das Application-Object ja relativ früh in einem noch recht unfragmentierten Speicher angelegt wird, ist die Wahrscheinlichkeit recht hoch, dass es ziemlich am Anfang des Heaps liegt. Aber im Prinzip hast du recht
Um dem aus dem Weg zu gehen, kann man die Adresse der globalen Variablen Application benutzen : Die liegt unterhalb des Heap aber garantiert höher als die VMT's :
Delphi-Quellcode:
procedure Check(Proc: TProc);
begin
  if Integer(TMethod(Proc).Data) < Integer(@Application) then
    ShowMessage('Class Proc')
  else
    ShowMessage('Object');
end;
Glückauf

Geändert von guinnes ( 4. Feb 2011 um 20:13 Uhr) Grund: Rächtschraibfähler besaitigt
  Mit Zitat antworten Zitat