Форум: "Начинающим";
Текущий архив: 2012.05.06;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c