Exceptions über DLL Grenzen werfen?
-
Hallo Forum,
1. Ist es üblich Exceptions über DLL Grenzen hinweg zu werfen oder sollte ich doch lieber auf Funktionsrückgabewerte umsteigen? Ich habe selbst noch nie eine Exception von einer fremd DLL bekommen... zu exotisch
2. Wenn ich für mein DLL Projekt einen Com/Atl Wrapper schreibe (damit VB6 Anwender meine DLL benutzen können) muß ich dort die Exceptions auf jeden Fall abfangen, weil man über Com/Atl keine Exceptions werfen kann. Korrekt?
Vielen Dank im voraus

-
ich hab schon Exeptions von Libraries bekommen, und ich muss sagen, dass ich das sehr Hilfreich fand, das hat einem auch gut bei der Fehlerbehandlung weitergeholfen. Um präzise zu werden, ClanLib geht so vor, und ich kann diesen Programmierstiel nur unterstützen.
-
Vielen Dank Krux:)
-
Krux schrieb:
ich hab schon Exeptions von Libraries bekommen...das hat einem auch gut bei der Fehlerbehandlung weitergeholfen...
An sich gebe ich dir Recht, nur würde ich die Aussage etwas einschränken.
Mag daran liegen das ich in einen Multi-Compiler-Environment arbeite, aber man sollte vorher klären ob die Exception auch richtig interpretiert werden kann (In meinen Fall würde eine Exception in der Regel zu einer Zugriffverletzung oder ähnlichen führen).
An Schnittstellen von Bibliothekgrenzen würde ich keine Exceptions einsetzen, wenn:
a) Die Bibliothek auch extern Verwendung finden kann (Selbst bei gleichen Compilern, da manche ggf. Exceptionhandling deaktivieren).
b) Man mit mehreren verschiedenen Compilern/Sprachen hantieren muss.cu André
-
Blossom schrieb:
1. Ist es üblich Exceptions über DLL Grenzen hinweg zu werfen oder sollte ich doch lieber auf Funktionsrückgabewerte umsteigen? Ich habe selbst noch nie eine Exception von einer fremd DLL bekommen... zu exotisch
Exceptions über DLL Grenzen hinweg ist in der Regel keine gute Idee. Mal davon abgesehen, dass der C++ Standard DLLs nicht kennt, definiert er auch nur das Verhalten des Exception-Mechanismus, nicht aber die konkrete Implementierung. Verschiedene Compiler verwenden verschiedene (inkompatible) Techniken und selbst wenn alle DLLs mit dem gleichen Compiler (und den gleichen Switches) kompiliert wurden, gibt es keine Garantie, dass alles richtig funktioniert. Generell halte ich es mit dem Rat von Alexandrescu und Sutter: "Don't allow exceptions to propagate across module boundaries" (Item 62 aus "C++ Coding Standards"). In Ausnahmesituationen (Compiler und Build-Optionen sind überall bekannt und gleich) kann man es anders machen, dann sollte man aber sehr genau das Compiler-Handbuch studieren.
2. Wenn ich für mein DLL Projekt einen Com/Atl Wrapper schreibe (damit VB6 Anwender meine DLL benutzen können) muß ich dort die Exceptions auf jeden Fall abfangen, weil man über Com/Atl keine Exceptions werfen kann. Korrekt?
Das passt besser ins WinAPI-Forum.
-
An der DLL Schnittstelle bin ich auf int Rückgabewerte umgestiegen. So gehts dann auch durch COM...
Vielen Dank
