Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

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

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

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

Geschrieben

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

Geschrieben
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".
Geschrieben
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??

Geschrieben
Ja, das Problem ist, dass ich wie gesagt den _com_error abfangen muss
Das ist ja schön und gut. Dazu reicht ein catch aus. Aber warum überhaupt wirfst du dann wieder eine Exception? Wozu das throw?
Geschrieben

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

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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