![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка исключительной ситуации [D5, Win95/98, NT4, Win2k]
Alex Shulg © (2002-11-28 16:24:00)Добрый день, друзья. Прошу о помощи.
Моя программа вызывает один процесс, который иногда вызывает исключительные ситуации, а я стараюсь их обработать:
try
...
except
...
on E:EInvalidMatch do
begin
...
end;
on E:EInvalidPointer do
begin
...
end;
else
begin
...
end;
end; //try
Проблема в том, что в блоках on...begin..end я могу получить сообщение об ошибке (E.Message), но мне хотелось бы, чтобы и в блоке else я тоже мог получить данное сообщение. Я не знаю, почему происходит исключительная ситуация, все возможные исключения, вроде бы обрабатываю, но видать не все. Как узнать, что за ошибка? (В процессе отладки это невозможно). Зарание благодарю.
Victor_Cr (2002-11-29 23:46:00) [1]Удалено модератором
TankMan (2002-11-29 21:02:00) [2]>>TTCustomDelphiMaster
Усе спасибо... разобрался и понял :)
oomneeq (2002-11-29 18:20:00) [3]on E: Exception do begin MessageDlg("Socket Error", mtError, [mbOk], 0) end;
else ShowMessage ...
Не будет никогда никакого else!
on E: Exception - всех переловит!
FreeLancer (2002-11-29 17:28:00) [4]Тебе же уже все сказали.
А стрелочка то - голубая.
Кокандокало (2002-11-29 17:18:00) [5]Ну ?
Никто не знает?
Кокандокало (2002-11-29 13:05:00) [6]Да блин... ну нифига не работает... Может это потому , что в Дельфи это запускаю??
try
// Тут вызов сокета
except
on E: Exception do begin MessageDlg("Socket Error", mtError, [mbOk], 0) end;
else ShowMessage("Socket Error");
Дельфи вылетает с ошибкой и все тут.. показывает свою гребанную зеленую стрелочку посередине между try и except и все =((((
И никаких MessageDlg =((((
Кстати, что надо написать в uses чтобы ловить ESocketError ?
TTCustomDelphiMaster (2002-11-28 21:49:00) [7]Удалено модератором
TankMan (2002-11-28 21:13:00) [8]Удалено модератором
Dimka Maslov (2002-11-28 19:42:00) [9]else begin
if ExceptObject is Exception then S := (ExceptObject as Exception).Message
end;
pasha_golub (2002-11-28 17:44:00) [10]on E: EAbort
...
Тоже ловит все подряд...
oomneeq (2002-11-28 16:51:00) [11]вместо else пиши
on E:Exception do
begin
...
end;
этот блок будет ловить все остальные, не пойманые вышестоящими
важно, чтоб этот блок стоял самым последним.
exit (2002-11-28 16:41:00) [12]А может так:
try
...
except on E: Exception do
begin
if MessageBox(Application.Handle, PChar(E.Message), PChar(String(E.ClassName)),
MB_YESNO+MB_SYSTEMMODAL+MB_DEFBUTTON2) = mrYes then
begin
...
end else
begin
...
end;
if E.ClassType = EAccessViolation then ...
if E.ClassType = EDBEngineError then ...
end;
end;