try-catch Exception-Meldung ausgeben
-
Wie kann ich die Exception-Meldung (Fehlermeldung) in einem try-catch Block ausgeben, welches alles Exceptions abfängt?
try{ .. } catch (...){ Messagebox(0, ? ,0); // hier würde ich gerne die Exception anzeigen lassen, nur wie? }
-
Meinst du so in etwa?
#include <iostream> #include <windows.h> using namespace std; int main () { int Version = 0; try { Version = 5; if (Version < 3) throw "Format veraltet, kann nicht gelesen werden"; if (Version > 3) throw "Unbekanntes Format"; } catch (char *Fehlerstring) { // Fehler ausgeben MessageBox(NULL,TEXT(Fehlerstring),NULL,NULL); } return 0; }
-
Naja, mit catch(...) fängst du eine unbekannte Exception ab. Also weißt du auch nicht wo du ihren Fehlertext herbekommst. catch(...) sollte man sowieso nur dann machen, wenn man nicht weiß was alles geworfen werden kann. Eher ein schlechtes Zeichen.
Schau einfach in die Doku oder Source der Funktion, die eine Exception werfen kann und fange die spezielle Exception ab. Dann kannst du evtl. auch einen Fehlertext rausbekommen.
-
catch (char *Fehlerstring)
{
// Fehler ausgeben
MessageBox(NULL,TEXT(Fehlerstring),NULL,NULL);
}error C2065: 'LFehlerstring' : undeclared indentifier
??? Was ist falsch?
-
Hm, das kann ich dir jetzt leider auch nicht sagen, mit dem VS 2003 funktioniert der Quellcode bei mir jedenfalls.
-
ich hab hier embedded VC++. Es muss aber auch hier ein weg gehen. ist ziemlich an VC++ anglehnt. halt für pocket pcs.
-
Gib doch einfach C2065 in den Such-Index deiner MSDN-Hilfe ein, da wird dir geholfen.

-
Diese UNICODE-Mappings sollte man nur bei String-Literalen verwenden - das ist falsch (in der ASCII-Version dürfte es klappen, in der UNICODE-Version gibt's Probleme). Verwend' lieber ein Konvertierungsmakro ala A2T().
-
also eVC++ brauch immer WideStrings um Nachrichten darstellen zu können (so wie wchar_t, TCHAR)
..aber wie muss nun der catch-block aussehen. allein mit wchar_t in klammern kann der compiler auch nix anfangen.
-
Etwa so:
int main () { USES_CONVERSION; int Version = 0; try { Version = 5; if (Version < 3) throw "Format veraltet, kann nicht gelesen werden"; if (Version > 3) throw "Unbekanntes Format"; } catch (char *Fehlerstring) { // Fehler ausgeben MessageBox(NULL,A2T(Fehlerstring),NULL,NULL); } return 0; }(A2T wandelt char-Strings in TCHAR-Strings um - USES_CONVERSION definiert dafür einige Hilfsvariablen)
-
Oder man benutzt gleich Wide-String Literale.
int main () { int Version = 0; try { Version = 5; if (Version < 3) throw L"Format veraltet, kann nicht gelesen werden"; if (Version > 3) throw L"Unbekanntes Format"; } catch (const wchar_t* Fehlerstring) { // Fehler ausgeben MessageBoxW(NULL, Fehlerstring, NULL, 0); } return 0; }
-
ok, folgende Compilermeldung kommt in eVC++:
error LNK2001: unresolved external symbol "const type_info::'vftable'" (??_7type_info@@6B@)kennt das wer?
-
ok da fehlte die ccrtrtti.lib als library
aber nun schmiert das programm beim aufruf der exception ab! keine ahnung warum.
(catch(...) scheint dagegen zu funktionieren)