Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Крыша едет от re-raise / 4 сообщений из 4, страница 1 из 1
05.11.2002, 09:06
    #32064772
kva
kva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Крыша едет от re-raise
Привет всем!
Не понимаю выполнение следующего кода, кто может растолковать, откликнитесь.
Есть два участка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
try
  F1:=TForm1.Create;
    ...выполнение чего-то там ( 3 )
except
  on E: Exception do
  ShowMessage('тра-та-та'+E.Message);
end; 
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  try
    ...выполнение чего-то там ( 1 ) 
    ...заведомо вызывающее искл. ситуацию для этого примера
  except
    ShowMessage('оп-ля');
    raise;
  end; 
    ...выполнение чего-то там ( 2 )
end;

Полагал, что сообщения должны быть в следующей последовательности:
1) 'оп-ля'
2) 'тра-та-таоп-ля'
и передачи управления на ...выполнение чего-то там (3) не должно быть

На самом деле происходит:
1) 'оп-ля'
2) 'оп-ля' //обработка искл. ситуации
и затем идет выполнение чего-то там (3)
Такое впечатление, что
Create не находится в try..except;
или Create и OnFormCreate не связаны;
или re-raise отрабатывает не так как я представлял;
или у меня крыша поехала.
Возможно сочетание указанных вариантов :)
...
Рейтинг: 0 / 0
05.11.2002, 09:30
    #32064793
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Крыша едет от re-raise
Просто борланд так написал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TCustomForm.DoCreate;
begin
  if Assigned(FOnCreate) then
  try
    FOnCreate(Self);
  except
    Application.HandleException(Self);
  end;
  if fsVisible in FFormState then Visible := True;
end;


Как только исключение происходит в OnCreate, то оно обрабатывается через Application.HandleException
А это последняя точка существования объекта исключения, этот объект там разрушается, поэтому исключение выше по стэку уже не передается.
...
Рейтинг: 0 / 0
05.11.2002, 10:55
    #32064856
kva
kva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Крыша едет от re-raise
Спасибо, Dankov
Только я попробую уточнить.
Насколько я понимаю объект исключения разрушается не от того, что обрабатывается процедурой Application.HandleException, а именно потому, что обрабатывается (в try exeption в TCustomForm.DoCreate).
Потому что если бы обработка шла
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure TCustomForm.DoCreate;
begin
  if Assigned(FOnCreate) then
  try
    FOnCreate(Self);
  except
    ShowMessage('охо-хо');
  end;
  if fsVisible in FFormState then Visible := True;
end;

то все равно назад по стеку передачи не было бы, потому что здесь нет re-raise.
Вы согласны?
...
Рейтинг: 0 / 0
05.11.2002, 12:14
    #32064905
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Крыша едет от re-raise
Согласен
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Крыша едет от re-raise / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]