Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Effektives Errorhandling in DLL's (https://www.delphipraxis.net/131702-effektives-errorhandling-dlls.html)

Desmulator 29. Mär 2009 13:16


Effektives Errorhandling in DLL's
 
Hi @all,

da ich zurzeit an DLL's arbeite und sich mir immer wieder die Frage stellt, wie mache ich das mit den Errors, hab ich mir gedacht, fragste doch mal die Freaks von der DelphiPraxis. :wink: Grundsetzlich geht es mir darum, möglichst einfach den Nutzer von dem Fehlschlagen der Funktion zu informieren, allerdings wünsche ich mir auch klare Funktionen bzw. Prozeduren, die nur Dinge zurückgeben, die gebraucht werden, bzw. nichts zurück geben, wenn man nichts direkt zurückgeben kann. Beispiel: eine Is*-Funktion sollte immer einen Boolean zurückgeben, nicht etwa ein HResult, zusätzlich aber noch einen Pointer auf eine Variable verlangen, in die dann das eigendliche Ergebnis kommt. Da kommt einem dann direkt der Gedanke: "Mach ich das Ding halt einfach mit Exceptions". Problem ist, afaik, dass Exceptions von Sprache zu Sprache anders sind und somit kann man leider keine Exception mit Hilfe von try..except-Blöcken abfangen, sofern sie aus einer DLL heraus geworfen wurden. Dann bekamm ich noch die Idee, einfach einen Exceptionhandler für die DLL zu programmieren, der den Fehler ausgibt und dann mitels ExitProcess, der ganzen Sache ein unsauberes Ende verleit. Das geht natürlich auch nicht, da, wenn eine Funktion fehlschlägt, dass nicht direkt in einer Katastrophe von AV's und sonstigen Hilfeschreien enden muss.

Gibt es noch etwas, was wirklich gut ist?

MfG Desmu

Desmulator 31. Mär 2009 13:05

Re: Effektives Errorhandling in DLL's
 
Weiß keine einen Rathschlag? =(

shmia 31. Mär 2009 13:21

Re: Effektives Errorhandling in DLL's
 
Wenn du mit DLLs programmierst, dann bleibt nur die Möglichkeit Errorcodes zurückzugeben.
"Old School" Programmierung halt.
Alle Annehmlichkeiten wie Klassen, Objekte und Exceptions (das sind ja auch Klassen) können die Grenze zwischen der DLL und der Anwendung nicht überspringen.

Es gibt besondere DLLs nämlich Delphi-Packages und ActiveX-DLLs mit denen man wieder Objektorientiert arbeiten kann.

Apollonius 31. Mär 2009 13:39

Re: Effektives Errorhandling in DLL's
 
Mach es mit HResult. In Delphi gibt es dafür mit der Safecall-Aufrufkonvention spezielle Unterstützung, sodass du absolut nichts mehr tun musst, aus .NET geht es ähnlich (aus VB vermutlich auch, aber wer verwendet VB). Alle anderen Sprachen müssen es manuell machen, aber die haben dann eben Pech gehabt.

EWeiss 31. Mär 2009 17:34

Re: Effektives Errorhandling in DLL's
 
Zitat:

(aus VB vermutlich auch, aber wer verwendet VB).
was für ein problem hast du ?
Kommentar hättest sparen können Oder?

ICH.. ICH..

DMW 2. Apr 2009 21:17

Re: Effektives Errorhandling in DLL's
 
Zitat:

Zitat von Apollonius
Mach es mit HResult.

Auch meine Empfehlung.


Zitat:

Zitat von Apollonius
In Delphi gibt es dafür mit der Safecall-Aufrufkonvention spezielle Unterstützung, sodass du absolut nichts mehr tun musst, aus .NET geht es ähnlich (aus VB vermutlich auch, aber wer verwendet VB). Alle anderen Sprachen müssen es manuell machen, aber die haben dann eben Pech gehabt.

Auch in C++ (was vermutlich den größten Teil der "anderen Sprachen" abdecken dürfte) ist dieser Komfort erreichbar: wenn du für deine DLL eine Typbibliothek erstellst, kannst du dir mit den besseren C++-IDEs (Visual C++, C++Builder) einen gleichermaßen komfortablen Wrapper generieren lassen. Ansonsten gäbe es noch die Möglichkeit, den Safecall-Mechanismus mit Makros zu emulieren - nicht eben schön, aber es funktioniert.


Zitat:

Zitat von EWeiss
Zitat:

(aus VB vermutlich auch, aber wer verwendet VB).
was für ein problem hast du ?

Muß man das wirklich erörtern?
Falls ja: Verity Stob hat das IMHO recht gut zusammengefaßt.

(Es wäre noch anzumerken, daß es natürlich nicht um VB.NET geht; wenn man dessen Benutzern Glauben schenken darf, soll daraus ja eine brauchbare Programmiersprache geworden sein.)


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