AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wie Exceptions im Hauptprogram auslösen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Exceptions im Hauptprogram auslösen?

Ein Thema von BlueStarHH · begonnen am 9. Sep 2005 · letzter Beitrag vom 9. Sep 2005
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
848 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie Exceptions im Hauptprogram auslösen?

  Alt 9. Sep 2005, 15:24
Hallo,

wie kann ich Exception direkt im Hauptprogramm (*.dpr) auslösen? Erstellt eine leeres Projekt und tragt den unten angegebenen Code ein. Dann wird die
Exception zwar richtig ausgelößt, wenn ich das Programm aus Delphi starte. Starte ich das Programm jedoch aus dem Explorer wird zunächst die
Fehlermeldung "Die Ausnahme "Unbekannter Softwarefehler" (0x0eedfade) ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten." und anschließend in
einer zweiten Fehlermeldung meine Exception angezeigt. Wie kann ich verhindern, dass die erste Meldung angezeigt wird? Sonst wird bei Exceptions
doch auch nur eine Meldung angezeigt.

Gruß
BlueStar


Delphi-Quellcode:
program Project1;

uses
  Forms,
  sysutils,
  Unit1 in 'Unit1.pas{Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);

  raise Exception.Create('Test');

  Application.Run;
end.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Wie Exceptions im Hauptprogram auslösen?

  Alt 9. Sep 2005, 18:56
Hallo BlueStar,

die korrekte Art eine Exception außerhalb von Application.Run() auszulösen ist - an deinem Beispiel-Code demonstriert - diese:

Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);

  try
    raise Exception.Create('Test');
  except
    on E: Exception do
    begin
      Application.ShowException(E);
      if MustTerminate(E) then
        Application.Terminate;
    end;
  end;

  Application.Run;
end.
In der unit, in der deine Fehlerbehandlungsroutinen versammelt sind, könnte das hier noch Platz finden:

Delphi-Quellcode:
function MustTerminate(E: Exception): boolean;
begin
  Result := false;
end;
Nur so kannst du an einer solchen Stelle verhindern, dass deine Exception zum OS durchschlägt.

Grüße vom marabu
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
848 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Wie Exceptions im Hauptprogram auslösen?

  Alt 9. Sep 2005, 19:24
Könnte ich auch das Application.Run; innerhalb von try/finally also direkt nach raise Exception.Create('Test'); schreiben? Hätte das Nachteile wenn Application.Run; mit einem try/finally-Block gekapselt ist?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Wie Exceptions im Hauptprogram auslösen?

  Alt 9. Sep 2005, 19:32
Ohne ein Konzept für das exception handling deiner Anwendung ist das jetzt reines Philosophieren. Run ist intern bereits gekapselt. Letzte Instanz vor dem OS ist dadurch Application.HandleException. Dazu findest du etwas in der Online-Help. Wenn du dich mittels Application.OnException() in diese letzte Instanz der Fehlerbehandlung einklinkst, dann denkst du dir bestimmt etwas dabei, wenn du eine Exception weiterreichst (reraise). Warum solltest du in einer zusätzlichen Kapsel bessere Ideen für die Behandlung des Fehlers haben?

Nachdenkliche Grüße vom marabu
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
848 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Wie Exceptions im Hauptprogram auslösen?

  Alt 9. Sep 2005, 19:39
Wenn ich das Application.Run; mit in den try/finally Block ziehe, wird es bei einer Exception, die davor auftritt, nicht mehr ausgeführt. Dann spart man sich das

Delphi-Quellcode:
    if MustTerminate(E) then
        Application.Terminate;
  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 00:07 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