2011-04-05 168 views
0

我有一个Visual Studio 2008 C++ Windows Mobile 6.5项目,我想要捕获SEH异常,将它们写入文件并向用户提供有关如何记录缺陷报告的具体说明这个问题。我的代码看起来非常像这样:在GUI代码中捕获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

回答

0

窗口过程通常调用间接和库可能通过插入周围回调函数的SEH异常块,掩蔽错误并防止其传播调用堆栈向上并回到保护自己WinMain()

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

+0

因此,我需要'__try' /'__except'块在每个线程中,直到vectored异常处理移植到Windows Embedded Handheld?坚果。现在我更加高兴MS从路线图中放弃了WEH7。它将具有CE6.0的这一特性。 – PaulH 2011-04-06 17:47:23