Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Anwendung zur Dateierweiterung aus der Registry lesen (https://www.delphipraxis.net/185216-anwendung-zur-dateierweiterung-aus-der-registry-lesen.html)

Sir Rufo 23. Mai 2015 00:04

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Nein, die API löst keine Exception aus

Luckie 23. Mai 2015 00:06

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Verdammt übersehen,weil ich es immer da setze, wo ich die Funktion verlasse und nicht irgendwo mitten drin.

Die API Funktion löst mit Sicherheit keine Exception aus. Sie hat ja Rückgabewerte. Die Exception musst schon du auslösen.

Dalai 23. Mai 2015 00:43

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Lies aber nochmal genau nach, wann die Funktion erfolgreich ist:
Zitat:

Returns a value greater than 32 if successful, or a value less than or equal to 32 representing an error.
MfG Dalai

mm1256 23. Mai 2015 08:58

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
@Dalai: Danke für den Tipp. Du hast natürlich recht. Das >= ist falsch.

Delphi-Quellcode:
  Result := Handle > 32;

Popov 23. Mai 2015 09:57

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1302705)
Allerdings wäre eine Exception hier besser ...

Ist vielleicht etwas OT, aber ich frage mich auch immer was besser ist: eine Exception oder eine alternative Lösung.

Muss es immer ein Krachbum Error-Messagebox sein mit der Info am Ende seines Weißheit zu sein? Sicher, manchmal geht es nicht anders, was soll man also noch machen wenn es keine Lösung gibt. Dann aber frage ich mich was ein Browser machen würde wenn er bei jedem Fehler in einer HTML-Datei aussteigen würde. Dann sage ich mir aber auch - warum die Mühe? Eine anständige Fehlermeldung erspart dir viel Arbeit. Und das Beste - keine wird dir Vorwürfe machen, schon gar nicht danken, wenn du statt einer Fehlermeldung versuchst den Fehler zu reparieren.

mm1256 23. Mai 2015 10:46

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Die Frage "Exception werfen" stellt sich doch bei einem WinAPI-Aufruf nicht, weil sowieso keine geworfen wird. Folglich gibt es auch nichts zu reparieren.

Es geht also lediglich um die Auswertung des Rückgabewertes. Was ich mit dem Rückgabewert "AResult" in der aufrufenden Prozedur mache, kann und möchte ich situationsbezogen entscheiden. Darum finde ich persönlich (jeder darf und soll seine eigene Variante für besser finden) diesen Weg für praktikabel, weil flexibel anwendbar.

Ob man für den Rückgabewert des Exe-Dateinamens und des möglichen Fehlertextes im Klartext jeweils eine eigene Variable nimmt, ist eine Designfrage. Ich mag's lieber kompakt, weil ich meinen Code leider öfter lesen als schreiben muss. Muss was mit dem Alter zu tun haben :?:

Luckie 23. Mai 2015 12:31

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Exceptions sind Teil der strukturierten Programmierung. Ist vielleicht Geschmackssache, ob man welche wirft und wann und wie. Aber wenn ich mit Klassen arbeite kannich einfach eine Methode nach der anderen aufrufen und die Fehlerbehandlung zentral an einer Stelle abhandeln. Hat den Vorteil, dass ich nicht zich if-then Ebenen habe und in der 10. dann gucken muss, wo ich eigentlich bin und ob alle Bedingungen noch Konsistent sind. Beispiel:

Delphi-Quellcode:
if funca then
begin
  if funcb then
  begin
    if funcc then
    begin
      // irgendwas
    else
      // irgendwas
  end
  else
    //irgendwas
end
else
  // irgendwas
end;
Jetzt der Code mit Exceptions:
Delphi-Quellcode:
funca ();
begin
  if not APIFunc then
    RaiseLastOSError;
end;
Delphi-Quellcode:
try
  funca;
  funcb;
  funcc;
execpt
  ShowMessage(EcodeToString(Exception.ECode));
end;

Das funktioniert natürlich nur, wen die Funktionen Exceptions werfen. Und da kann es schon sinnvoll sein eine API Funktion so zu kapseln, dass sie eine Exception wirft.

Siehe auch: http://docs.embarcadero.com/products...stOSError.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Seite 2 von 2     12   

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