Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

К вопросу о замене 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 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
2-1163532851
Troan_81
2006-11-14 22:34
2006.12.03
Про окно


4-1153811578
Romas81
2006-07-25 11:12
2006.12.03
серийный номер винчестера (НЕ GetVolumeInformation !)


2-1163394280
Lebedev
2006-11-13 08:04
2006.12.03
Можно ли регулировать положение текста (caption) TPanel?


3-1159522323
RomanH
2006-09-29 13:32
2006.12.03
Результат запроса null->результат запроса=0


4-1153168446
GL00m
2006-07-18 00:34
2006.12.03
И снова про USB-COM и проблемы с ним...