bigpoint Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 Ich habe eine einfache Exception Klasse geschrieben. Die Klasse versuche ich etwer so: throw MyException("Test", e); [/PHP] aufzurufen, leider jedes mal schmirt das Programm mit unbekannte Exception einfach ab. Die Klasse ist nicht von CException abgeleitet, sie gibt einfach nur par Strings zurück Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 leider jedes mal schmirt das Programm mit unbekannte Exception einfach ab. "Schmiert mit unbekannte Exception ab" ist keine ausreichende Fehlerbehandlung. Wie versuchst du die Exception denn zu fangen? Tust du das überhaupt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 11. Oktober 2007 Autor Teilen Geschrieben 11. Oktober 2007 "Schmiert mit unbekannte Exception ab" ist keine ausreichende Fehlerbehandlung. Wie versuchst du die Exception denn zu fangen? Tust du das überhaupt? Ja es handelt sich um eine _com_error Exception, die fange ich in eine andere Klasse etwa so: catch(_com_error& e) { throw MyException("Test", e); } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 Ja es handelt sich um eine _com_error Exception, die fange ich in eine andere Klasse etwa so:Ich verstehe nur noch Bahnhof. Was hat diese andere Exception damit zu tun? Wo (und wie) fängst du diese MyException, die du da wirfst? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 11. Oktober 2007 Autor Teilen Geschrieben 11. Oktober 2007 Also, ich habe eine Klasse. MyException.h class MyException { protected: CString mMessage; LONG mHResult; void getOleErrorInfo(long hrErr); public: MyException(); virtual ~McADOException(){} MyException(const CString &message, _com_error &e); }; #endif [/PHP] MyException.cpp [PHP] MyException::MyException(const CString &msg, _com_error &e) { mHResult = e.Error(); try { mMessage += (const char *)e.Description(); } catch(...) {} CString err; CString strMessage = e.ErrorMessage(); err.Format(_T(" ErrNo: %lx, Message: %s"), mHResult, strMessage); mMessage += err; } In eine andere Klasse sagen wir MyKlass mache ich folgendes try { .... }catch(_com_error& e) { throw MyException("Test", e); } [/PHP] Sobald ich sich die Exception auslöst komme ich ganz brav in den Konstruktor Und sobald ich diesen code-abschnitt verlasse mMessage += err; wird die "unbekannte exception " geworfen, so seht call stack aus: msvcr80d.dll!_CxxThrowException(void * pExceptionObject=0x0012fc88, const _s__ThrowInfo * pThrowInfo=0x00454498) Line 161 Test.exe!exec_mit_rs() Line 172 + 0x48 bytes Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 Also, ich habe eine Klasse. MyException.h class MyException { protected: CString mMessage; LONG mHResult; void getOleErrorInfo(long hrErr); public: MyException(); virtual ~McADOException(){} MyException(const CString &message, _com_error &e); }; #endif [/PHP]Das kann ja schon mal nicht sein. Der Name des Destruktors passt nicht zur Klasse. Vermutlich aber nur ein "Umbenennungsfehler". In eine andere Klasse sagen wir MyKlass mache ich folgendes [PHP] try { .... }catch(_com_error& e) { throw MyException("Test", e); } Und wo ist das try/catch zu diesem throw? Wenn du diese MyException, die du da wirfst, nirgends fängst (d.h, wenn dieses throw nicht in einem try-Block steckt), dann ist doch logisch, dass sich dein Programm beendet. Und da MyException von keiner Standardexceptionklasse abgeleitet ist, ist es für VS natürlich "unbekannt". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 11. Oktober 2007 Autor Teilen Geschrieben 11. Oktober 2007 Das kann ja schon mal nicht sein. Der Name des Destruktors passt nicht zur Klasse. Vermutlich aber nur ein "Umbenennungsfehler". :upps Und wo ist das try/catch zu diesem throw? Wenn du diese MyException, die du da wirfst, nirgends fängst (d.h, wenn dieses throw nicht in einem try-Block steckt), dann ist doch logisch, dass sich dein Programm beendet. Und da MyException von keiner Standardexceptionklasse abgeleitet ist, ist es für VS natürlich "unbekannt". Ja, das Problem ist, dass ich wie gesagt den _com_error abfangen muss, wie kann ich dann die Klasse ableiten?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 Ja, das Problem ist, dass ich wie gesagt den _com_error abfangen mussDas ist ja schön und gut. Dazu reicht ein catch aus. Aber warum überhaupt wirfst du dann wieder eine Exception? Wozu das throw? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 11. Oktober 2007 Autor Teilen Geschrieben 11. Oktober 2007 Den _com_error liefert doch gewisse Informationen, und ich wollte die nicht jedes Mal im catch vorbereiten sondern "schön und gut" das ganze ein mal in eine separate Klasse tun Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 11. Oktober 2007 Teilen Geschrieben 11. Oktober 2007 Den _com_error liefert doch gewisse Informationen, und ich wollte die nicht jedes Mal im catch vorbereiten sondern "schön und gut" das ganze ein mal in eine separate Klasse tunJa, aber diese Klasse wirfst du doch wieder als Exception. Ich habe immer noch nicht verstanden, warum du das tust, und die Frage hast du bisher auch nicht beantwortet. Aber wenn du zu diesem throw kein passenden try/catch hast, dann beendet sich dein Programm. Mal bildlich gesprochen: Die _com_error-Exception ist wie ein Stein, der auf eine Fensterscheibe zufliegt. Was du machst, ist, den Stein zu fangen (ok), in hübsches Papier zu wickeln (auch ok), und dann wieder in Richtung Scheibe zu werfen (wozu :confused:). Wenn da kein weiterer Fänger ist, kracht es, egal wie hübsch das Papier ist. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bigpoint Geschrieben 12. Oktober 2007 Autor Teilen Geschrieben 12. Oktober 2007 Danke Klotzkopp, hab verstanden :marine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.