C ++ исключения могут быть любого типа. С помощью catch () вы указываете тип исключения, которое вы хотите перехватить в качестве параметра. Особый случай с (...) заключается в том, что вы поймаете любое другое исключение, которое вы не указали в предыдущих ловушках.
Основой исключений в C ++ для Стандартной библиотеки является std :: exception. Чтобы перехватить все исключения, стандартным способом в программе на C ++ является следующий:
(в основной функции, например)
try
{
}
catch( const std::exception & e )
{
// catch standard exceptions, you can use e.what() to know what exception you caught
}
catch( ... )
{
// catch all other types but you can't do much with them
}
Не рекомендуется, даже если это возможно, создавать собственные исключения, которые не наследуются от std :: exception. Но CException, похоже, не наследует его.
В вашем случае я посоветую вам сделать следующее, чтобы перехватить все исключения, которые могут возникнуть (опять же, например, в вашей основной функции и в функциях основного потока):
try
{
}
catch( const CException & e )
{
// catch all CExceptions
//as far as I know it is ok now to catch CException by reference with modern Microsoft compilers? It was not always the recommended microsoft way
}
catch( const std::exception & e )
{
// catch standard C++ exception
}
catch( ... )
{
// catch others
}
Как всегда, когда к нему не привыкли, может быть сложно узнать, что такое стандарт C ++ и что такое Windows API.