(MFC mit dem...) Fehler in DLL abfangen
-
Ist es möglich einen Fehler in einer (fremden) DLL abzufangen?
Wenn ich von meinem Hauptprogramm eine "fremde" DLL-Function aufrufe und die z.B. durch 0 teilt, stürzt mein ganze Prog ab. Kann ich nicht den Fehler irgendwie abfangen....?
-
jepp:
try//Exceptions, die hier ausgelöst werden, { DllFunc(); } catch(...)//werden hier abgefangen (wichtig: catch(...) nicht catch()) { ; }
-
klappt so aber nicht. Wenn die DLL eine Division durch 0 ausführt, schmiert mein ganzes Prog ab.....
-
#include <new> // // function template emulating 'new(std::nothrow)' // template<typename T> T *new_nothrow() throw() { T *p; try { p = new T; } catch(std::bad_alloc &) { p = NULL; } return p; } // // example usage // int main() { int *p = new_nothrow<int>(); // equivalent to 'new(nothrow) int' return 0; }
als zusatz throw() fehlt in deiner dll
[ Dieser Beitrag wurde am 03.06.2003 um 15:23 Uhr von vdittrich editiert. ]
-
Zuerst einmal vielen Dank, aber ich kann Deinem Code nicht so richtig folgen. Vielleicht hast Du mich auch falsch verstanden.
Ich will in einer "fremden" DLL deren Code ich nicht ändern kann (die aber Fehler hat) eine Function z.B: CalcX(..) ausführen. Mein Problem ist, das CalcX seinerseits functions aufruft, die DiV/0 ausführen können. In diesem Fall hätte ich gerne eine Ausnahmebehandlung in meinem Prog damit nicht alles abschmiert....
DANKE!
-
Standard C++ kennt keine DLLs.
Du kannst den Fehler nicht abfangen, dies hängt vom Compiler ab.
-
Programm -> Mann
DLL -> FrauProgramm linkt DLL -> Mann heiratet Frau
DLL generiert Fehler -> Frau will netHat Mann in den letzten mehreren tausend Jahren Evolution schon eine Lösung gefunden? (eher net)
-
Wenn du mit Fließkommazahlen arbeitest, hilfen dir vielleicht diese Funktionen weiter (möglicherweise MSVC++ spezifisch):
unsigned int _control87( unsigned int new, unsigned int mask ); unsigned int _controlfp( unsigned int new, unsigned int mask );
Mit diesen Funktionen müsstest du die Hardware Exceptions bei Division durch 0 deaktivieren können.
-
Hallo,
welchen Compiler verwendest du?
-
Original erstellt von <cLE>:
möglicherweise MSVC++ spezifischJa, ist nicht ANSI C sondern nur Win95/NT kompatibel...
-
Compiler: MS VC++ 7.0