1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| type
TMyObject = class(TObject)
// ...
constructor Create(AValue: Integer);
destructroy Destroy; override;
end;
procedure DoSomething;
var
Size: Integer;
Obj: TMyObject;
begin
Size := TMyObject.InstanceSize;
asm
SUB ESP,Size
MOV Obj,ESP
end;
TMyObject.InitInstance(Obj);
try
Obj.Create(3);
// Do something with object Obj
finally
asm
MOV EAX,Obj
XOR DL,DL
MOV ECX,[EAX]
CALL DWORD PTR [ECX + VMTOFFSET TObject.Destroy]
end;
Obj.CleanupInstance;
end;
asm
ADD ESP,Size
end;
end; |
Partager