Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

unbekannte Exception

Empfohlene Antworten

Veröffentlicht

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

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

  • Autor

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

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".
  • Autor
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??

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.