![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как подменить обработчик исключений? [D6, D7, Win95/98, WinXP]
Lin7 © (2004-07-27 10:57:00)Есть функция SetUnhandledExceptionFilter, с помощью которой можно подменить обработчик исключений.
Делаю:
type
P_EXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
function MainFilter(P: P_EXCEPTION_POINTERS): integer; stdcall;
begin
Result := 0; // показывать системный диалог
// обработка возникших исключений
case P.ExceptionRecord.ExceptionCode of
EXCEPTION_ACCESS_VIOLATION:
begin
end;
EXCEPTION_DATATYPE_MISALIGNMENT:
begin
end;
else
begin
MessageBox(0, 'MainFilter','Error', MB_OK );
Result := 1; // не показывать системный диалог
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetUnhandledExceptionFilter(@MainFilter);
end;
Пример взят из Инета... и не работает :(
Кто-нибудь может мне растолковать, как правильно подменить обработчик исключений всего приложения?
У самого разобраться не получается.
Примерчик бы...
Спасибо.
Subdigger (2004-07-27 11:24:00) [21]public
{ Public declarations }
procedure ExceptionHandler(Sender: TObject; E: Exception);
end;
Application.OnException := ExceptionHandler;
Digitman (2004-07-27 11:22:00) [22]
> обработчик исключений всего приложения
исключения перехватываются/обрабатываются не на уровне приложения, а на уровнях каждого из кодовых потоков процесса приложения
VMcL (2004-07-27 11:04:00) [23]>>Lin7 (27.07.04 10:57)
Чем не устраивает try/except?