Ah, du hast Delphi 2010, da musst du es so machen:
Delphi-Quellcode:
on e: EOutOfResources
do
begin
delta := cardinal(EHeapException.ClassParent.InstanceSize) - SizeOf(Pointer);
// den Offset zur Boolean-Variable auslesen
PBoolean(cardinal(e) + delta)^ := True;
// "AllowFree" auf "True" setzen (Offset + Instance-Pointer = Heap Pointer)
end;
// <-- hier wird die Exception dann automatisch freigegeben (siehe auch: AcquireExceptionObject, etc.)
In Delphi 2010 wird an das Ende der Klasseninstanz noch eine TMonitor-Referenz gespeichert. Daher muss der Pointer auf diese Referenz vom Offset noch abgezogen werden.