2011-04-05 4 views
0

私はSEH例外をキャッチし、ファイルに書き込んで、不具合報告のログを記録するための具体的な手順を提示するVisual Studio 2008 C++ Windows Mobile 6.5プロジェクトを持っていますこの問題。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ハンドラなど)に例外があると、通常の「We're Sorry ...」ダイアログが表示され、エラー処理コードが実行されません。

これらの例外をキャプチャするにはどうすればよいですか? C#.NET CFでは、Application.ThreadExceptionApplication.CurrentDomain.UnhandledExceptionを購読します。このため。 C++に相当するものはありますか?

おかげで、 PaulH

答えて

0

ウィンドウプロシージャは、一般的に間接的に呼び出され、ライブラリーは、おそらく、コールバック関数の周りにSEH例外ブロックを挿入するエラーをマスクし、コールスタックを伝播し、バックから、それを防止することによって、自分自身を保護しますWinMain()

ウィンドウハンドラにSEH例外ブロックを追加して、イベントハンドラで発生する例外をキャッチします。

+0

したがって、ベクタリングされた例外処理がWindows Embedded Handheldに移植されるまで、すべてのスレッドで '__try' /' __except'ブロックが必要ですか?ナッツ。今私はMSがロードマップからWEH7を落としたのも幸せだ。それはCE6.0からのその特徴を持っていたでしょう。 – PaulH

関連する問題