Zum Inhalt springen

unbekannte Exception


bigpoint

Empfohlene Beiträge

"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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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".
Link zu diesem Kommentar
Auf anderen Seiten teilen

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??

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Ja, 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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...