(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.



  • @AnTri

    Programm -> Mann
    DLL -> Frau

    Programm linkt DLL -> Mann heiratet Frau
    DLL generiert Fehler -> Frau will net

    Hat 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++ spezifisch

    Ja, ist nicht ANSI C sondern nur Win95/NT kompatibel...



  • Compiler: MS VC++ 7.0


Anmelden zum Antworten