![]() |
AW: AcquireExceptionObject() / ReleaseExceptionObject()
Zitat:
AcquireExceptionObject hängt die Exception von dem Exception-Block ab und gibt sie dir und ReleaseExceptionObject würde die Exception des Exception-Block freigeben, welche es da aber schon nicht mehr gibt. rein logisch sind diese beiden Codes identisch
Delphi-Quellcode:
=
except ReleaseExceptionObject; end;
Delphi-Quellcode:
except AcquireExceptionObject.Free; end;
|
AW: AcquireExceptionObject() / ReleaseExceptionObject()
Das ist ja nur ein Test. Der Klassische Fall das Exception-Objekt außerhalb des try..except-Blocks weiterleben lassen zu wollen ist es bspw. in einem anderen Thread zu verarbeiten (Exception-Logging, ...).
So macht das
Delphi-Quellcode:
auch damit man nach Thread-Ende noch das Feld
TThread
Delphi-Quellcode:
auslesen kann.
FatalException
Und ja, ich weiß dass ich das zurückgegebene TObject / Exception "normal" freigeben kann. Es geht aber darum dass die Doku ein Laufzeitverhalten verspricht das überhaupt nicht existiert. Dass Code existiert der anscheinend überhaupt nicht aktiv ist da er von einer leeren Prozedur verdeckt wird. |
AW: AcquireExceptionObject() / ReleaseExceptionObject()
Es lassen sich nicht alle Dinge auf allen Platformen gleich umsetzen und das ist eine plaformübergreifende Funktion.
Wenn es in einer Platform kein äquivalentes Verhalten gibt und sich das Standardverhalten nicht extrem wiedersprüchlich verhalten würde, dann macht man dort einfach nichts und schon ist gut. :angle: Da finde ich es "schwachsinniger", dass .Free unter ARC garnichts macht, obwohl man dort etwas genau jetzt freigeben will. |
AW: AcquireExceptionObject() / ReleaseExceptionObject()
Die Doku is kompletter Unfug. ReleaseExceptionObject kann gar nicht das machen, was da steht, weil man AcquireExceptionObject so oft und auf so viele Exceptions machen kann, wie man will. Wenn man sie freigeben möchte, reicht ein einfaches Free bzw auf nil setzen der Variable unter ARC (ab Delphi 10.2).
Vorher war die Funktion unter ARC noch verbuggt, da sie einen Pointer zurücklieferte und somit ARC umging (siehe ![]() Korrektur: Das mit dem RefCount in ReleaseExceptionObject ist nur unter dem IFDEF PC_MAPPED_EXCEPTIONS und hat mit ARC nix zu tun - guckstu: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz