2011-04-05 110 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