gpt4 book ai didi

exception - 在 MFC 应用程序中,将最顶层的 try/catch 放在哪里?

转载 作者:行者123 更新时间:2023-12-01 04:06:25 25 4
gpt4 key购买 nike

在 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 );

但是,我可以把块放在哪里?
我使用 Visual Studio 2010 创建了一个基于 MFC 对话框的应用程序,并在 Release x64 中编译它,我在 Windows 7 上。
我扔了一个 std::exception (将字符串传递给构造函数)在 OnTimer 中方法和没有块我得到一个由 csrss.exe 创建的消息框用这个通用消息

"The exception unknown software exception (0x40000015) occurred in the application at location 0x5dff61c9."

"Click on OK to terminate the program"

"Click on CANCEL to debug the program"



消息框不会报告我附加到异常的字符串,因此它不是很有用。
我想我得到的是消息框而不是花哨的 TaskDialog,因为我禁用了 Windows 错误报告服务并重命名了 WerFault.exe。

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

最佳答案

在 MFC 应用程序中处理未处理异常的正确方法是覆盖 CWinApp::ProcessWndProcException

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

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

关于exception - 在 MFC 应用程序中,将最顶层的 try/catch 放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com