Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1325799180
Gu
2012-01-06 01:33
2012.05.06
опции компилятора


2-1325903132
Gu
2012-01-07 06:25
2012.05.06
имена функций длл


15-1325361710
Anatoly Podgoretsky
2012-01-01 00:01
2012.05.06
С Новым Годом


15-1325277002
Юрий
2011-12-31 00:30
2012.05.06
С днем рождения ! 31 декабря 2011 суббота


15-1325661876
Свифт
2012-01-04 11:24
2012.05.06
раздача инета по wi-fi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский