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

Вниз

Application.OnException   Найти похожие ветки 

 
Satrap ©   (2002-01-24 10:19) [0]

уважаемые мастера, скажите, можно ли в обработчике события
Application.OnException получить код ошибки, вызвавшую ту или иную исключительную ситуацию?


 
Виктор Щербаков ©   (2002-01-24 10:22) [1]

Код ошибки - это что?

Можно проверить исключение на принадлежность к какому-либо класу:
if E is EInOutError then ...


 
Satrap ©   (2002-01-24 16:24) [2]

Например, есть искл. сит-я Asincoronius Socket Error, в ее поле Message говорится о номере ошибки, можно ли в обработчике OnException получить этот номер?


 
Digitman ©   (2002-01-24 17:13) [3]

Можно. Вариантов куча.
1. Вариант через "причинное место" - код ошибки присутствует в строковом виде в строке текстового сообщения об исключении. Позиция фиксирована по отн. к концу строки в зависимости от WSA-операции, вызвавшей исключение
ExceptMessage := E.Message;
if E is ESocketError then
.. ErrCode:= StrToInt(Copy(ExceptMessage, ..., ...))

2. Вариант получше - не доводить обработку исключения до верхнего уровня (Application.OnException) - это крайняя мера, использование ее, как правило, непрофессионально и предназначено, в 1-ю очередь, для отладочных целей.
Обрабатывать исключение лучше в событии TCustomSocket.OnError, при возбуждении которого параметром передается код ошибки

3. Вариант надежный (но требуется полная уверенность, что гнездовой транспорт инициализирован для работы в осн.потоке) -
вызвать ф-цию WSAGetLastError


 
Satrap ©   (2002-01-25 08:50) [4]

В том то и проблем, что работа сокетов вызывает не только исл. с-ии типа ESocketError, которые можно обработать в событии OnError
>DigitMan
Я вообще делал так, как Вы советуете в п1., просто мне казалось
, что некрасиво вытаскивать код ошибки из Message. Что касается WSAGetLastError, то в OnException эта функция упорно возвращает Ноль, но возможно я использую ее неправильно, спасибо всем за помощь


 
Vitaly Nevzorov   (2002-01-26 00:32) [5]

try
{somthing}
except
on e:exception do showmessage(e.message);
end;

Думаю что в обработчике можно сделать что-либо подобное или на худой конец получить класс ошибки


 
Anatoly Podgoretsky ©   (2002-01-26 20:37) [6]

Второй параметр передаваемый в обработчик события E: Exception, у него есть свойство Message типа string



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
1-32188
Лана Розанова
2002-01-28 16:26
2002.02.11
Hook


4-32381
_SnAke_
2001-12-08 16:00
2002.02.11
SystemTray


1-32196
RUS1
2002-01-29 12:41
2002.02.11
Как можно удалить сразу все файлы и подкаталоги в директории


3-32139
EternalWonderer
2002-01-14 16:33
2002.02.11
Обращение к объектам чужой схемы в Oracle.


1-32297
Abajun
2002-01-28 13:39
2002.02.11
Обработка исключительных ситуаций