Problem mit try catch



  • Hallo,

    in meinem Hauptprogramm verbinde ich mit LoadLibrary(..) eine dll.
    Dies klappt einwandfrei. In dieser dll werfe ich über throw eine Exception vom Typ ERR (eigener Datentyp).
    Einen try Block gibt es in der dll nicht, sondern nur in der Hauptanwendung, aus der ich eben Funktionen aus der dll aufrufe.

    Komischerweise werden die Exceptions aus der dll im Hauptprogramm im catch Block (catch(...) {...}) nicht abgefangen.

    Wieso?

    Danke.



  • C++Student schrieb:

    Wieso?

    Weil das böse ist, was du machst. Exceptions dürfen nicht über Bibliotheksgrenzen hinweg geworfen werden weil nicht sichergestellt ist, dass beide Bibliotheken (bzw. die Bibliothek und dein Hauptprogramm) den selben Mechanismus zum Exceptionhandling verwenden.
    Fehlerübergabe an Bibliotheksgrenzen sollte ausschließlich über Fehlercodes erfolgen.



  • Ok es mag böse sein, aber wie kann ich es lösen?

    Also ich hab in den dlls Klassen, die Fehler werfen. Diese Fehler will ich ausserhalb der dll behandeln, und zwar im catch Block meiner Hauptanwendung.

    Das Problem ist, ich komme gar nicht in diesen catch Block rein.

    Was muss ich machen um eben da reinzukommen, egal wie böse es ist 🙂
    Oder welche alternativen Lösungsmöglichkeiten gibt es?

    Danke.



  • C++Student schrieb:

    Ok es mag böse sein, aber wie kann ich es lösen?

    Mit Exceptions, die über Biblitoheksgrenzen hinweg fliegen garnicht.

    Also ich hab in den dlls Klassen, die Fehler werfen. Diese Fehler will ich ausserhalb der dll behandeln, und zwar im catch Block meiner Hauptanwendung.

    Wie schon gesagt, das geht nicht. Statt exceptions zu werfen kannst du nur Fehlercodes zurückgeben.

    Das Problem ist, ich komme gar nicht in diesen catch Block rein.

    Weil die Exceptions aus deiner Bibliothek rausfliegen und irgendwo im Nirvana landen und nie in der Hauptanwendung ankommen.

    Was muss ich machen um eben da reinzukommen, egal wie böse es ist 🙂
    Oder welche alternativen Lösungsmöglichkeiten gibt es?

    Du kannst wie erwähnt nichts machen um da reinzukommen. Die alternative Lösungsmöglichkeit heißt, Fehlercodes zu erzeugen. Schlimmstenfalls so: Du fängst in der DLL die Exception, wadelst sie in einen entsprechenden Fehlercode um, gibst diesen über die Grenze in deine Hauptanwendung und schreibst dort eine Wrapperschicht, die die Fehlercodes analysiert und ggf. wieder eine Exception wirft.



  • Also erstmal danke für die Antworten.

    Ich werde es dann "klassisch" lösen und Fehlercodes zurückgegen.

    Wieder was gelernt.


Anmelden zum Antworten