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;