Перехват исключений SEH в коде GUI - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть проект 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

1 Ответ

0 голосов
/ 06 апреля 2011

Оконная процедура обычно вызывается косвенно, и библиотека, вероятно, защищает себя, вставляя блок исключений SEH вокруг функций обратного вызова, маскируя ошибку и предотвращая ее распространение по стеку вызовов и обратно к WinMain().

Добавьте блок исключений SEH в вашу оконную процедуру, чтобы перехватывать любые исключения, возникающие в ваших обработчиках событий.

...