AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Try Except und Re raise geht nicht

Ein Thema von QuickAndDirty · begonnen am 21. Jul 2009 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#1

Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 13:26
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.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 13:36
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.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 13:56
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#4

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 14:06
@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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#5

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 14:22
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?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#6

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 14:44
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?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 15:43
Zitat von QuickAndDirty:
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.
Woher willst du wissen das die Exception nicht ausgelöst wird?
Möglicherweise wird die insbesondere gerade bei Installation ausgelöst.
Entferne zum Test mal das "TVSession.Create".
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.883 Beiträge
 
Delphi 12 Athens
 
#8

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 15:48
Habe ich doch bereits
ersetzt. Das Problem ist anscheinened das try except

hast du das mal versucht nachzuvollziehen?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#9

Re: Try Except und Re raise geht nicht

  Alt 21. Jul 2009, 15:59
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Krampus

Registriert seit: 19. Mär 2007
9 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Try Except und Re raise geht nicht

  Alt 7. Nov 2012, 10:16
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
Wieso? keine Ahnung!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz