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