Почему использование __try __except приводит к тому, что функция не работает в оптимизированном выпуске VS C ++ / clr? - PullRequest
0 голосов
/ 05 октября 2018

Итак, у меня есть 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 в другом месте программы, и она работает там.

...