为什么使用__try __except导致函数在VS C ++ / clr优化发行版中不起作用?

时间:2018-10-05 06:52:43

标签: c++ visual-c++ exception-handling mfc clr

所以我有VS 2017,创建了新的MFC应用程序,使用/ clr编译了发行版x86,多字节字符集,优化了支持速度(/ O2)。

当:: Run函数包含__try __except异常处理程序时,该函数将不会在优化的发行版中被调用,否则将引发错误“公共语言运行库检测到无效程序”。

使用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 __,并且在这里也可以使用。

0 个答案:

没有答案