Keine Ausnahmebehandlung trotz richtigem Catch
-
In der MSDN steht:
CFile( LPCTSTR lpszFileName, UINT nOpenFlags ); throw( CFileException );
Also möchte ich das so fangen:
try { CStdioFile in(Datei.c_str(), CFile::modeRead); /* mach was */ in.Close(); return true; } catch (CFileException e) { return false; }
Wenn ich jetzt aber als Datei einen Schmarrn übergebe (234dPPO), dann kommt bei mir eben ein Kernelfehler - die Ausnahme wird nicht abgefangen.
Schreib ich statt dessen, catch(...), dann geht's!
Warum?
-
Was bedeutet den "Kernelfehler ?"
Access-Violation z.B. wirst du dadurch bekommen, dass diverse Pointer ins Nirvana zeigen. Da hilft auch das Abfangen der CFileException nichts.
Gibts keinen konkreten Fall ?
Etwas später...
Hab mir mal die Frage nochmals durchgelesen:Bei der MFC werden die Exceptions immer mit Pointer auf die Exception-Objekte geworfen ( historisch bedingt ). Abfangen musst Du Sie wie folgt:
try { CStdioFile file( filename ); ... } catch( CFileException* e ) { //-- hier Behandlung einfügen e->Delete(); }
Siehe auch MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_exceptions.3a_.catching_and_deleting_exceptions.asp
-
Vielen Dank - jetzt klappt das auch!