проблемы с SEH

Тема в разделе "WASM.WIN32", создана пользователем was_log_a, 21 авг 2007.

  1. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Устанавливаю в WinMain обработчик исключения таким образом:

    Код (Text):
    1. #ifndef NOSEH
    2. asm
    3. {
    4. push dword offset Handler
    5. push FS:[0]
    6. mov FS:[0],esp
    7. }
    8.  
    9. #endif
    10.  
    11. //........
    12.  
    13. while (GetMessage(&msg,NULL,0,0))
    14. {
    15. TranslateMessage(&msg);
    16. DispatchMessage(&msg);
    17. }
    18.  
    19. #ifndef NOSEH
    20. asm
    21. {
    22. pop FS:[0]
    23. pop eax
    24. }
    25. #endif
    Если исключение происходит в функции, вызываемой из WinMain,то все обрабатывается нормально, но при возникновении исключения в CALLBACK функции обработки оконных сообщений программа молча вылетает. Насколько я знаю, это происходит при возникновении исключения внутри обработчика исключения. В чем может быть причина?

    код обработчика:
    Код (Text):
    1. int _cdecl Handler(struct _EXCEPTION_RECORD *ExceptionRecord,
    2.     void * EstablisherFrame,//указатель на структуру SEH
    3.     struct _CONTEXT *ContextRecord,//Указатель на структуру CONTEXT
    4.     void * DispatcherContext)
    5. {
    6. MessageBox(0,"Exception","!",MB_OK);
    7.  
    8.  
    9. if ((*ExceptionRecord).ExceptionFlags!=0)
    10. return 1;
    11.  
    12. if ((*ExceptionRecord).ExceptionCode==STATUS_ACCESS_VIOLATION
    13. && !(*ExceptionRecord).ExceptionFlags
    14. && (*ContextRecord).Eax==pr_gen_excpt_addr)
    15. {
    16. //...
    17. //...
    18. //...
    19. обработка специально генерируемого исключения, оно обрабатывается нормально
    20. //..
    21. return 0;
    22. }
    23.  
    24.  
    25. return 1;
    26. }
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    а калбэк вызывается из другого потока, где установленный тобой сех не действует
     
  3. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    но обработчик-то вызывается при этом (MessageBox выскакивает, потом прога вырубается).

    Я так знаю, что WindowProc вызывается из DispatchMessage() в том же потоке
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    was_log_a
    А сюда заглядывал?
     
  5. was_log_a

    was_log_a New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    97
    Y_Mur
    Заглядывал. Ответ на свой вопрос не нашел. esp у меня нигде не модифицируется