Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie Exceptions im Hauptprogram auslösen? (https://www.delphipraxis.net/53074-wie-exceptions-im-hauptprogram-ausloesen.html)

BlueStarHH 9. Sep 2005 15:24


Wie Exceptions im Hauptprogram auslösen?
 
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.

marabu 9. Sep 2005 18:56

Re: Wie Exceptions im Hauptprogram auslösen?
 
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

BlueStarHH 9. Sep 2005 19:24

Re: Wie Exceptions im Hauptprogram auslösen?
 
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?

marabu 9. Sep 2005 19:32

Re: Wie Exceptions im Hauptprogram auslösen?
 
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

BlueStarHH 9. Sep 2005 19:39

Re: Wie Exceptions im Hauptprogram auslösen?
 
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz