Устанавливаю в WinMain обработчик исключения таким образом: Код (Text): #ifndef NOSEH asm { push dword offset Handler push FS:[0] mov FS:[0],esp } #endif //........ while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } #ifndef NOSEH asm { pop FS:[0] pop eax } #endif Если исключение происходит в функции, вызываемой из WinMain,то все обрабатывается нормально, но при возникновении исключения в CALLBACK функции обработки оконных сообщений программа молча вылетает. Насколько я знаю, это происходит при возникновении исключения внутри обработчика исключения. В чем может быть причина? код обработчика: Код (Text): int _cdecl Handler(struct _EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame,//указатель на структуру SEH struct _CONTEXT *ContextRecord,//Указатель на структуру CONTEXT void * DispatcherContext) { MessageBox(0,"Exception","!",MB_OK); if ((*ExceptionRecord).ExceptionFlags!=0) return 1; if ((*ExceptionRecord).ExceptionCode==STATUS_ACCESS_VIOLATION && !(*ExceptionRecord).ExceptionFlags && (*ContextRecord).Eax==pr_gen_excpt_addr) { //... //... //... обработка специально генерируемого исключения, оно обрабатывается нормально //.. return 0; } return 1; }
но обработчик-то вызывается при этом (MessageBox выскакивает, потом прога вырубается). Я так знаю, что WindowProc вызывается из DispatchMessage() в том же потоке