Есть ли способ поймать необработанное std :: исключение в приложении MFC?

0

При поиске ответа на этот вопрос я столкнулся с этим вопросом

В приложении MFC, где поставить самую верхнюю попытку/улов?

в котором говорится, что нужно переписать CWinApp :: ProcessWndProcException, чтобы поймать все исключения. Однако это работает только для исключений, которые наследуются от CException. Есть ли способ сделать это для исключений, которые наследуются от std :: exception?

В конце концов я хочу разместить "самый верхний" блок try/catch где-нибудь и показать окно сообщений всякий раз, когда этот блок try/catch получает исключение.

  • 0
    Что мешает вам вставить предложение catch (const std :: exception & e) {} в блок try / catch?
  • 0
    Вопрос в том, где должен находиться этот «самый верхний» блок try / catch.
Показать ещё 2 комментария
Теги:
exception-handling
mfc
std

2 ответа

0

Как справиться с этим в переопределении CWinApp?

http://msdn.microsoft.com/en-us/library/akdx0603.aspx

Таким образом, будет класс, который переопределяет CWinApp или CWinAppEx в вашем приложении. Функция CWinApp :: Run является обработчиком сообщений. Это было бы хорошим местом, чтобы ваша попытка перехватить базовую реализацию. Вид вроде этого:

MyApp::Run(...)
{
    try {
        CWinApp::Run(...);
    }
    catch stuff ...
}
0

Стандартный способ уловить любое необработанное исключение в C++ - использовать std :: set_terminate(). Это будет зарегистрировать обратный вызов для вас, чтобы его уведомляли при вызове std::terminate(), который включает случай, когда исключение не было поймано вообще.

  • 0
    std::set_terminate не будет перехватывать необработанное в противном случае исключение в обычном смысле «catch» (разрешая дальнейшее выполнение).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню