Exception 在MFC应用程序中,最上面的try/catch放在哪里?

Exception 在MFC应用程序中,最上面的try/catch放在哪里?,exception,mfc,try-catch,Exception,Mfc,Try Catch,在MFC应用程序中,最上面的try/catch放在哪里 我有一个MFC应用程序,我想捕获所有异常并显示我自己的消息框 这是我对最顶级的try/catch块的想法: try { // What enclose here? Or, where to put this try/catch block? } catch( const std::exception& e ) { ::MessageBox(0,e.what(),"I do not know hot to handle t

在MFC应用程序中,最上面的try/catch放在哪里

我有一个MFC应用程序,我想捕获所有异常并显示我自己的消息框

这是我对最顶级的try/catch块的想法:

try
{
   // What enclose here? Or, where to put this try/catch block?
}
catch( const std::exception& e )
{
   ::MessageBox(0,e.what(),"I do not know hot to handle this exception, I will terminate",MB_OK);
}
catch(...)
{
   ::MessageBox(0,"Unknown Excpetion","I do not know hot to handle this exception, I will terminate",MB_OK);
}
::TerminateProcess( ::GetCurrentProcess(), -1 );
但是,我可以把积木放在哪里? 我用VisualStudio2010创建了一个基于MFC对话框的应用程序,并在版本x64中编译了它,我在Windows7上。 我在
OnTimer
方法中抛出一个
std::exception
(将字符串传递给构造函数),在没有该块的情况下,我得到一个由
csrss.exe
创建的消息框,该消息框带有此通用消息

“在中发生异常未知软件异常(0x40000015) 位于位置0x5dff61c9的应用程序。“

“单击“确定”终止程序”

“单击“取消”调试程序”

消息框不报告附加到异常的字符串I,因此它不太有用。 我想我得到的是消息框而不是一个奇特的任务对话框,因为我禁用了Windows错误报告服务并重命名了WerFault.exe


也许我不得不忘记我自己的消息框,我需要接受新的Windows错误报告?

在MFC应用程序中处理未处理异常的正确方法是重写

您可能只希望处理某些异常类型。如果您想在某些情况下使用默认行为,请调用基本实现。如果您不呼叫基站,您的应用程序将不会关闭


如果要显示自定义错误消息,然后关闭,同时避免显示默认消息,请显示消息框,然后在主框架/对话框上调用
DestroyWindow

Hi,这是否仅在CEException未处理时调用?有没有办法为用户定义的异常类提供类似的行为?谢谢继承CException的任何未经处理的异常都将在
ProcessWndProception
中处理。很容易在代码中测试这个。好的,谢谢。(是的,很抱歉;我现在不在windows计算机上……)但是,您知道除了用户定义的异常类之外,如何能够提供相同的行为吗?谢谢在用户定义的异常类中继承CException。我不知道非CEException异常的行为是什么。