Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.004 c
1-32211
AlexDov
2002-01-11 18:27
2002.02.11
Утечка памяти. Memory Leak


6-32302
Мирон
2001-11-20 19:03
2002.02.11
Удаленный контроль за пользователем


14-32325
NLO
2001-12-20 14:18
2002.02.11
ZIP


3-32179
ray_wagner
2002-01-15 07:58
2002.02.11
Фокус в DbGrid


6-32312
Александр_1
2001-11-16 00:33
2002.02.11
Трафик





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский