在GUI代码中捕获SEH异常

时间:2011-04-05 21:31:53

标签: c++ exception-handling windows-mobile

我有一个Visual Studio 2008 C ++ Windows Mobile 6.5项目,我想抓住SEH异常,将它们写入文件,并向用户提供有关如何记录此问题的缺陷报告的具体说明。我的代码看起来非常像这样:

static int WriteDump( struct _EXCEPTION_POINTERS* ep )
{
    // code to write info to a file
    return EXCEPTION_EXECUTE_HANDLER;
}

int WINAPI _tWinMain( HINSTANCE hInstance, 
                      HINSTANCE /*hPrevInstance*/, 
                      LPTSTR lpstrCmdLine, 
                      int nCmdShow )
{
    int result = 0;

    __try
    {
        result = StartMyGuiApp( hInstance, lpstrCmdLine, nCmdShow );
    }
    __except( WriteDump( GetExceptionInformation() ) )
    {
        // empty
    }

return 0;
}

如果从主线程抛出SEH异常,这可以正常工作。但是,如果GUI代码中存在异常(例如WM_CREATE处理程序),则会出现通常的“我们很抱歉......”对话框,并且我的错误处理代码永远不会执行。

我可以做些什么来捕获这些例外情况?在C#.NET CF中,我会订阅Application.ThreadExceptionApplication.CurrentDomain.UnhandledException。为了这。是否有C ++等价物?

谢谢, PaulH

1 个答案:

答案 0 :(得分:0)

窗口过程通常是间接调用的,并且库可能通过在回调函数周围插入SEH异常块来保护自己,屏蔽错误并阻止它向上传播调用堆栈并返回WinMain()

在窗口过程中添加SEH异常块,以捕获事件处理程序中发生的任何异常。