Форум: "KOL";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизК вопросу о замене System/SysInit в Delphi и обработке исключений Найти похожие ветки
← →
Игорь Шевченко © (2006-02-15 17:39) [0]Дабы не уводить обсуждение в оффтопик в http://delphimaster.net/view/11-1139899673/
Насколько я понял, в KOL решена проблема обработки использования конструкций try ... except, try ... finally и raise xxxx без использования SysUtils.
В связи с этим вопрос - можно ли с использованием подходов, примененных в KOL, определять как собственно обработчики исключений, так и фильтры, возвращающие как надо обрабатывать исключение, по образу в классической обработки SEH.
Иными словами, возможно ли писать обработчики, подобные следующему коду (на С):
__try
....
__except (ErrorCode = GetExceptionPointers()->ExceptionRecord->ExceptionCode, FooExceptionFilter (GetExceptionPointers()) {
... do some exception handling...
}
int FooExceptionFilter (EXCEPTION_POINTERS* ExceptionPointers)
{
... some processing...
return ExceptionPointers->ExceptionRecord->ExceptionCode == STATUS_STACK_OVERFLOW ?
EXCEPTION_CONTINUE_SEARCH : EXCEPTION_EXECUTE_HANDLER
}
← →
ECM © (2006-02-15 18:27) [1]
> Насколько я понял, в KOL решена проблема обработки использования
> конструкций try ... except, try ... finally и raise xxxx
> без использования SysUtils.
Не совсем верно... try ... finally - да всё верно.
try ... except и raise требуют применения доп модуля Err.pas (далее выдержка из его шапки):{
This code is grabbed mainly from standard SysUtils.pas unit,
provided by Borland Delphi. This unit is for handling exceptions,
and to use it just place a reference to exceptions unit in
uses clause of any of your unit or dpr-file.
}
← →
Игорь Шевченко © (2006-02-15 18:39) [2]ECM © (15.02.06 18:27) [1]
Да, я его скачал по ссылке, данной в указанной ветке, но не нашел там возможности определять именно фильтр исключений. Потому и спросил. Кроме того, сдается мне, что непосредственные действия по обработке выполняются все-таки в System.pas
← →
homm © (2006-02-15 20:42) [3]2 Игорь Шевченко
> В связи с этим вопрос - можно ли с использованием подходов,
> примененных в KOL, определять как собственно обработчики
> исключений, так и фильтры, возвращающие как надо обрабатывать
> исключение, по образу в классической обработки SEH.
Если я не в чем не ошибаюсь...
В SEH фрейм всегда запихивается процедура из system: _ExceptionHandler. Она проверяет тип исключения - если OS, то вызывается ExceptObjProc. Эта ExceptObjProc объявлена в SysUtils или err. Именно она и определяет тип исключения и возвращает класс Exception.
О фильтрах, что-то возвращающих не очень понял, наверное давно про SEH читал, а на практике (в асемблере) не пользовался.
← →
Игорь Шевченко © (2006-02-16 11:04) [4]
> О фильтрах, что-то возвращающих не очень понял
В той же _ExceptionHandler есть такой код
CALL UnhandledExceptionFilter
CMP EAX,EXCEPTION_CONTINUE_SEARCH
В данном случае UnhandledExceptionFilter
и есть тот самый фильтр, который что-то возвращает, согласно принципу обработки SEH.
Меня бы интересовал метод, который позволяет вызывать не жестко зафиксированный UnhandledExceptionFilter из kernel32.dll, потому что фильтр может возвратить как EXCEPTION_CONTINUE_SEARCH, так и EXCEPTION_CONTINUE_EXECUTION и EXCEPTION_EXECUTE_HANDLER
Спрашиваю на предмет, может, кто занимался этим вопросом
С наилучшими,
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.042 c