Итак, у меня есть VS 2017, я создал новое приложение MFC, скомпилировал сборку Release x86 с / clr, многобайтовый набор символов, оптимизированную скорость фаворита (/ O2).
Когда :: Run функция содержит __try __except обработчик исключений, функция не будет вызываться в оптимизированной сборке выпуска или выдает ошибку «Common Language Runtime обнаружила недопустимую программу».
При использовании try-catch или, если оптимизация C / C ++ отключена (/ Od), она работает как положено.
int CMFCTryExceptTestApp::Run()
{
::AfxMessageBox("CMFCTryExceptTestApp::Run");
for (;;)
{
__try
{
int ret = CWinAppEx::Run();
return ret;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
ASSERT(FALSE);
}
}
}
Это работает всегда:
int CMFCTryExceptTestApp::Run()
{
::AfxMessageBox("CMFCTryExceptTestApp::Run");
for (;;)
{
try
{
int ret = CWinAppEx::Run();
return ret;
}
catch(...)
{
ASSERT(FALSE);
}
}
}
Я также использовал __try __except в другом месте программы, и она работает там.