wxWidgets Exceptions
-
Ich möchte in meiner wxWidgets Applikation Exceptions benutzen, wenn etwas schief gelaufen ist. Da ein Vorteil von Exceptions ist, dass man alles relativ zentral behandeln kann, würde ich das gerne für alle Events an einer Stelle erledigen.
Also hab ich mich mal schlau gemacht:
http://docs.wxwidgets.org/trunk/overview_exceptions.html
http://docs.wxwidgets.org/trunk/classwx_app_console.html#78a6f9e56b77addf8251f0f5c10004fbUnd daraufhin folgenden Code zusammengebastelt:
class MrlViewer : public wxApp ... virtual void HandleEvent(wxEvtHandler *handler, wxEventFunction func, wxEvent &event); void MrlViewer::HandleEvent(wxEvtHandler *handler, wxEventFunction func, wxEvent &event) { try { wxAppConsole::HandleEvent(handler, func, event); } catch(std::exception &ex) { wxMessageBox(boost::diagnostic_information(ex), "An exception occured"); } catch(...) { wxMessageBox("unbekannte ausnahme!", "just a test"); } }
Leider wird das aber irgendwie niemals aufgerufen. Die einzige mögliche Ursache, die ich finden konnte war, dass wxUSE_EXCEPTIONS nicht definiert ist, das ist aber alles korrekt eingestellt.
Außerdem finde ich es ziemlich albern, dass, wenn VC 2008 Express im Debugger eine ungefangene Exception findet, er mir eine ziemlich wirre Codestelle zeigt und nicht die, wo die Exception per throw geworfen wurde. Kann man das ändern, oder macht das Sinn so?
-
So kannst du nur die Exceptions fangen, die in einem EventHandler geworfen wurden afaik.
Hast du eine Testexception mal geschmissen?phlox
-
Ja ich hab schon einiges getestet.
Ich müsste damit doch z.B. alles fangen können, was in Funktionen geworfen wird, die ich in der EventTable eintrage, oder? Und da ja quasi alles nur per Event aufgerufen wird, müsste ich auch alles, was nicht beim Initialisieren oder Beenden auftaucht kriegen.
Aber scheinbar wird schon die HandleEvent Funktion überhaupt niemals aufgerufen, was ich merkwürdig finde. Auch wenn ich den wxwxAppConsole::HandleEvent Aufruf weglasse, funktioniert alles normal weiter (was ja eigentlich auch Zeigt, dass die Funktion überhaupt nie benutzt wird).
-
Ja, äh, is ja auch kein Wunder.
Du hast da die falsche Signatur
Häng mal ein const an die Methode ran:
virtual void wxAppConsole::HandleEvent (wxEvtHandler *handler,wxEventFunction func,wxEvent &event)const
-
Ja, hm, funktioniert jetzt ^^