![]() |
Try Except und Re raise geht nicht
Hallo ,
ich hatte einen so ähnlichen Thread schon mal in dem ich festgestellt habe das eine Unit in Delphi 7 welche einen try except Block im Initialization und im Finalization Teil hat in einem Package eingebunden dazu führt das es sich nicht INSTALLIEREN lässt. Warum? Kkann ich da was anderes machen als die try excepts zu entfernen? Mein neustes nicht installierbares Beispiel sieht so aus.
Delphi-Quellcode:
initialization
try Session := TVSession.Create(nil); except On E:Exception do Raise Exception.create('Error in DBDLL_Fn.initialization: '+e.message); end; Finalization try Session.Free; Session := nil; except On E:Exception do Raise Exception.create('Error in DBDLL_Fn.finalization: '+e.message); end; end. So gehts
Delphi-Quellcode:
initialization
// try Session := TVSession.Create(nil); (* except On E:Exception do Raise Exception.create('Error in DBDLL_Fn.initialization: '+e.message); end;*) Finalization // try Session.Free; Session := nil; (* except On E:Exception do Raise Exception.create('Error in DBDLL_Fn.finalization: '+e.message); end;*) end. |
Re: Try Except und Re raise geht nicht
geht das nicht auch so?
ohne zu testen und ohne zu wissen obs besser wäre ;)
Delphi-Quellcode:
initialization
try Session := TVSession.Create(nil); except On E:Exception do begin e.Message := 'Error in DBDLL_Fn.initialization: '+e.message; raise; end; end; end. |
Re: Try Except und Re raise geht nicht
Im Abschnitt initialization ist kein Exceptionhandling möglich, weil das Exceptionsystem zu diesem frühen Zeitpunkt
noch nicht in Betrieb ist!! Es erscheint dann nur der Runtime Error 217. Im Abschnitt finalization ist Exceptionhandling sinnlos, da das Programm sowieso gleich zu Ende ist und ausserdem das Exceptionsystem nicht mehr in Betrieb ist!! ==> Code in initalization & finalization muss so geschrieben sein, dass garantiert keine Exception auftreten kann oder es muss jede Exception abgefangen und behandelt werden. |
Re: Try Except und Re raise geht nicht
@shmia:
Wenn die SysUtils-Unit im Interface-Abschnitt der entsprechenden Unit eingebunden ist, dann sollte auch die Exceptionbehandlung funktionieren (tut sie zumindestens bei mit immer), Denn Exceptionbehandlung wird über im Initialization- bzw. Finalization-Abschnitt der SysUtils eingerichtet und freigegeben. Und wenn diese SysUtils-Unit im Interface eingebunden ist, dann wird deren Initialization vor der "eigenen" Initialization ausgeführt und die Finalization umgekehrt. @Gruber_Hans_12345: Vorteil wäre, daß die Exceptionklasse erhalten bleibt und man so den Fehler nicht "verwässert". Also z.B. aus einer EOutOfMemory 'ne billige Exception macht, welches dann umgebende Try-Except's nicht mehr unterscheiden können. |
Re: Try Except und Re raise geht nicht
SysUtils wird als letzte Klasse im interface teil eingebunden.
Und der Code selbst arbeitet auch. Kompilierbar, benutzbar, nur leider nicht als Package installierbar :-( HM seltsam das. Und das obwohl eine Exception gar nicht ausgelöst wird. Ich weiß nur das Beim Installieren Initialization auf Jedenfall ausgeführt wird...aber wie soll ein programmierer einen Code so schreiben das er garantiert keine Fehler enthält? Und wenn einer drinn ist wie bekomme ich den Ort dann raus, wenn re-raise nicht erlaubt ist? |
Re: Try Except und Re raise geht nicht
Hab jetzt alles ausser der einer Globalen Variable vom typ Tstringlist auskommentiert
und nur diese erzeugt und die unit in einer anderen unit im interface teil verwendet welche in einem minalmal package (TEdit Descendent mit nur einer zusätzlichen public Varibale) benutzt wird........ .....Installation geht nicht. Ich hasse das. Kann mal jemand anders das ganze nachvollziehen oder habe nur ich das hier in D7? |
Re: Try Except und Re raise geht nicht
Zitat:
Möglicherweise wird die insbesondere gerade bei Installation ausgelöst. Entferne zum Test mal das "TVSession.Create". |
Re: Try Except und Re raise geht nicht
Habe ich doch bereits
ersetzt. Das Problem ist anscheinened das try except hast du das mal versucht nachzuvollziehen? |
Re: Try Except und Re raise geht nicht
Wie gesagt:
ich hab zwar grad nur D2009 und D2006 hier drauf, aber seitem ich Try-Except nutze (also schon ein paar Jährchen), hatte ich auch in D7 noch keine derarigen Probleme. |
AW: Try Except und Re raise geht nicht
Hallo Leute,
Habe exakt dasselbe Verhalten bei meinem D7 Ent (en). try except geht zwar Grundsätzlich in finalization, aber sobald versucht wird 'E.Message' zu verwenden, kracht die Package-Compilierung (Build geht komischerweise) und das Package liefert bei jedem IDE-Beenden einen Haufen Access-Violations. GEHT : on e: Raise Exception.create('Error blabla!'); NICHT: on e: Raise Exception.create('Error blabla: ' + e.message); Enfernt man das E.Message gibts keine Probleme :shock: Wieso? keine Ahnung! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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