我有一个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.ThreadException
和Application.CurrentDomain.UnhandledException
。为了这。是否有C ++等价物?
谢谢, PaulH
答案 0 :(得分:0)
窗口过程通常是间接调用的,并且库可能通过在回调函数周围插入SEH异常块来保护自己,屏蔽错误并阻止它向上传播调用堆栈并返回WinMain()
。
在窗口过程中添加SEH异常块,以捕获事件处理程序中发生的任何异常。