Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Konsolenanwendung und raise einer Exception (https://www.delphipraxis.net/171298-konsolenanwendung-und-raise-einer-exception.html)

Dalai 30. Okt 2012 12:35

Konsolenanwendung und raise einer Exception
 
Hey Leute :),

auf zum nächten Problem ;). Ich habe mich gestern mit den Möglichkeiten der Parameterübergabe an (Delphi-)Konsolenprogramme beschäftigt, um eine ähnliche Verhaltensweise wie bei Linux-Programmen zu erreichen (analog zu getopts der Bash). Dabei bin ich auf die Unit uSandkasten gestoßen.

Da dieser Unit weder eine Beschreibung noch ein Beispiel beilag, musste ich erstmal rausfinden, wie die darin enthaltene Klasse TGetOpt zu verwenden ist. Dabei wurde das Ende meiner Anwendung immer wieder von DrWatson abgefangen, was mich schon an den Fähigkeiten des Unit-Programmierers zweifeln ließ. Das war aber nur so lange der Fall wie ich meine Anwendung außerhalb von Delphi ausführte, denn im Delphi-Debugger wurden die von den Klassen/Methoden der Unit geworfenen Exceptions ordentlich gefangen und deren Meldung angezeigt.

Lange Rede, gar kein Sinn :mrgreen:.
Die kurze Frage daher: Muss ich mich bei einer Konsolenanwendung ausnahmslos selber um das Fangen von Exceptions kümmern? Also das "nacharbeiten", was offensichtlich die Klasse TApplication sonst in einer GUI-Anwendung ohne Zutun des Programmierers macht?

MfG Dalai

himitsu 30. Okt 2012 12:36

AW: Konsolenanwendung und raise einer Exception
 
Kuze Antwort: Ja.

In der VCL ist in der Message-Loop, also da wo z.B. eine Button-Click-Methode aufgerufen wird, wenn man auf 'nen Button klickt, ein Try-Except vorhanden, welches dieses abfängt und die Exception-MessageBox anzeigt.
(das erkennt man ganz schnell, wenn man nicht TThread verwendet, im Thread eine Exception auftritt und gleich das ganze Programm abraucht, wenn man das nicht abfängt)

Darum sollte man mindestens in der DPR den gesamten Code mit sowas Ähnlichem umschließen.
Delphi-Quellcode:
try
  ... //dein code
except
  on E: Exception do begin
    WriteLn;
    WriteLn(E.ClassName, ': ', E.Message);
    WriteLn;
    WriteLn('Beenden mit [Enter]');
    ReadLn;
  end;
end;
(in neueren Delphis ist sowas auch direkt gleich in einer neu angelegten Consolenanwendung enthalten, bzw. wurde da gleich in die DPR eingefügt)

[edit]
siehe
http://www.delphipraxis.net/171133-p...nprogramm.html

Dalai 30. Okt 2012 13:23

AW: Konsolenanwendung und raise einer Exception
 
OK, alles klar. Dankeschön!

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 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