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

Вниз

Exception dll   Найти похожие ветки 

 
Gu   (2012-01-08 03:28) [0]

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


 
Dimka Maslov ©   (2012-01-08 11:37) [1]

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


 
Rouse_ ©   (2012-01-08 14:46) [2]

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


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

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


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


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

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


 
Dimka Maslov ©   (2012-01-08 15:02) [5]


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


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


> Gu   (08.01.12 14:54) [3]


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


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


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


 
Dimka Maslov ©   (2012-01-08 15:03) [6]


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


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


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

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

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


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

ясно


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

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

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


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


 
Rouse_ ©   (2012-01-08 15:17) [10]


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

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


 
Dimka Maslov ©   (2012-01-08 15:23) [11]


> Gu   (08.01.12 15:16) [9]


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


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


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


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

понятно



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.006 c
15-1325241253
Jeer
2011-12-30 14:34
2012.05.06
С наступающим Новым Годом, друзья !


15-1325104202
Юрий
2011-12-29 00:30
2012.05.06
С днем рождения ! 29 декабря 2011 четверг


2-1326089711
Псарь
2012-01-09 10:15
2012.05.06
Свой Event Log.


2-1326037158
toropoff
2012-01-08 19:39
2012.05.06
скрол грида


4-1256757673
istok20
2009-10-28 22:21
2012.05.06
uac и автозагрузка...