Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exception dll


Gu ©   (2012-01-08 03:28:00) 

можно ли в длл сделать свой обработчик ошибок, типа как Application.OnException?


Gu   (2012-01-08 15:25:00) [1]

понятно


Dimka Maslov   (2012-01-08 15:23:00) [2]


> Gu   (08.01.12 15:16) [9]


После компиляции имён функций и переменных уже не существует. Существует лишь map-файл, показывающий по какому адресу находятся функции, а также сопоставление строк исходного текста с внутренними адресами. Адрес исключения показывается именно для того, что человек, занимающийся отладкой, посмотрел туда дабы найти место ошибки.


> Rouse_ ©   (08.01.12 15:17) [10]


Если очень захотеть, синий экран можно просто нарисовать:)


Rouse_   (2012-01-08 15:17:00) [3]


> Dimka Maslov ©   (08.01.12 15:02) [5]
> Бездумное (а в нашем случае оно именно такое) использование
> такого подхода может полностью убить всю обработку исключений
> в рамках процесса. Или вообще закончиться синим экраном.

Ну, синим экраном - это ты, конечно, переборщил, а по по поводу обработки исключений, если ты про отказ работы SEH - то конечно, ибо VEH именно для этого собственно и был создан :)


Gu   (2012-01-08 15:16:00) [4]

еще такой вопрос - тут:

> и в except вызвать одну и ту же процедуру.
> except
> on E: Exception do
>  HandleException(E);


в HandleException можно както получить имя процедуры (без явной передачи в качестве параметра), где возникло исключение?


Gu   (2012-01-08 15:14:00) [5]

ясно


_Юрий   (2012-01-08 15:06:00) [6]

Если вы хотите, чтобы исключения проходили из библиотеки в хост прозрачно, компилируйтесь с ран-тайм пакетами, все будет проходить.
(Судя по [3], проблемы использования разных языков не предполагается).

Второй вариант - обернуть все экспортируемые функции в try-except
и в except вызвать одну и ту же процедуру.
except
on E: Exception do
 HandleException(E);
Экспортируемых функций будет не так много, и это намного быстрее и проще, чем лезть в дебри системы, где вы еще и наверняка накосячите


Dimka Maslov   (2012-01-08 15:03:00) [7]


> а это почему плохо


Вообще-то это единственное правильное решение.


Dimka Maslov   (2012-01-08 15:02:00) [8]


> Rouse_ ©   (08.01.12 14:46) [2]


Бездумное (а в нашем случае оно именно такое) использование такого подхода может полностью убить всю обработку исключений в рамках процесса. Или вообще закончиться синим экраном.


> Gu   (08.01.12 14:54) [3]


Разберись сначала как и где работает Application.OnException, и что это вообще такое.


> такое будет работать


Что мешает проверить, что такое работать не будет?


Gu   (2012-01-08 15:01:00) [9]


> можно в каждую функцию вставить try..except

а это почему плохо? Ну скажем не в каждую, но в потенциально опасные можно?


Gu   (2012-01-08 14:54:00) [10]

а если передать в длл хендл аппликатион, там приравнять его местному и навестить обработчик онехсцептион - такое будет работать?


Rouse_   (2012-01-08 14:46:00) [11]

AddVectoredExceptionHandler() и проверять EXCEPTION_RECORD->ExceptionAddress.
Если ошибка не в недрах твоей библиотеки, то вертай EXCEPTION_CONTINUE_EXECUTION.
Правда исключения во внешних библиотеках при вызове функции твоей так не определишь - но тут можно зачитывать стэк вызовов, и проверять проходит ли он через твою библиотеку.


Dimka Maslov   (2012-01-08 11:37:00) [12]

Исключения в dll передаются вызывающей программе, где и обрабатываются. Ну а если опять уже очень хочется [censored] можно в каждую функцию вставить try..except


Наверх

Титульная страница Поиск, карта сайта Написать письмо