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

Вниз

Исключение при создании формы.   Найти похожие ветки 

 
GuAV ©   (2005-02-02 21:56) [0]

Такой вот код:
 try
   Form1 := TForm1.Create(nil);
 except
   on E: Exception do
   begin
     Application.ShowException(E);
     Result := 1;
     Exit;
   end;
 end;

Однако, при возникновении исключения форма всё равно создаётся и код в ехсерт не выполняется.

Можно ли как-нибудь выключить эту фичу ?

Эта особенность распространяется тоько на конструкторы форм или ещё на что-то ?


 
Anatoly Podgoretsky ©   (2005-02-02 23:40) [1]

Погашено в OnCreate И так делать не надо
Form1 := TForm1.Create(nil);
try
except
  on E: Exception do
  begin
    Application.ShowException(E);
    Result := 1;
    Exit;
  end;
end;


 
jack128 ©   (2005-02-03 00:03) [2]

GuAV ©   (02.02.05 21:56)
Однако, при возникновении исключения форма всё равно создаётся и код в ехсерт не выполняется.

Где именно исключение возникает? Если в событии OnCreate, то в пятерке эту фитчу нельзя отключить..Выше не знаю..

procedure TCustomForm.DoCreate;
begin
 if Assigned(FOnCreate) then
 try
   FOnCreate(Self);
 except
   Application.HandleException(Self);
 end;
 if fsVisible in FFormState then Visible := True;
end;


 
GuAV ©   (2005-02-03 00:26) [3]

jack128 ©   (03.02.05 0:03) [2]

Да, в OnCreate.
Спасибо. Не сообразил про Ctrl+Click

procedure TCustomForm.DoCreate;
begin
 if Assigned(FOnCreate) then
 try
   FOnCreate(Self);
 except
   if not HandleCreateException then
     raise;
 end;
 if fsVisible in FFormState then Visible := True;
end;

function TCustomForm.HandleCreateException: Boolean;
begin
 Application.HandleException(Self);
 Result := True;
end;

HandleCreateException - динамический метод, поэтому что делать - теперь понятно.

Anatoly Podgoretsky ©   (02.02.05 23:40) [1]

> И так делать не надо

Почему ?
Мне нужно в Result иметь 1 если получилось исключение, а исключения "выпускать" из dll не нужно. Причём не важно в OnCreate искл-е или где ещё.


 
Anatoly Podgoretsky ©   (2005-02-03 00:38) [4]

Ну если нужно, то другое дело, но вот пример глушения исключения приведен.


 
GuAV ©   (2005-02-03 00:43) [5]

Пришлось написать так, чтобы форма освобождалась:
 try
   Application.CreateForm(TForm1, Form1)
 except
   on E: Exception do
   begin
     Application.ShowException(E);
     Form1.Free;
     Result := False;
     Exit;
   end;
 end;


> Ну если нужно, то другое дело, но вот пример глушения
> исключения приведен.

Не понял.


 
Anatoly Podgoretsky ©   (2005-02-03 00:52) [6]

Вот погашеное
except
  Application.HandleException(Self);
end;


А вот повторно возбужденное
except
  if not HandleCreateException then
    raise;
end;


 
GuAV ©   (2005-02-03 01:18) [7]

Так получается, что приложение использующее эту dll неадекватно реагирует на исключения - оно считает вызов функции успешным в случае исключения.

Кстати, такой вопрос:
Если в DLL на Delphi возникает исключение, то можно ли его вообще "выпускать" из DLL ? Понятно, что текст исключения не-Delphi приложение не покажет. Но не приведёт ли неожиданное искючение к нарушению работы программы ?


 
Petr V. Abramov ©   (2005-02-03 04:02) [8]

> Если в DLL на Delphi возникает исключение, то можно ли его вообще "выпускать" из DLL ?
 Если build with Runtime packeges - можно. Если нет - точно не нужно.


 
jack128 ©   (2005-02-03 06:08) [9]

Ну вот такой код к краху приложения не приводит

library MyDll;

uses
 SysUtils,
 Classes;

{$R *.RES}

function TestException: Integer; safecall; export;
begin
 raise Exception.Create("Test");
 Result := -1
end;

exports
 TestException;

begin
end.

program MyApp;
{$APPTYPE CONSOLE}
uses
 SysUtils;

function Test: Integer; safecall; external "MyDll.dll" name "TestException";

begin
 try
   test
  except
    on E: Exception do
      WriteLn(E.Message);
  end;
  ReadLn;
end.



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

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

Наверх




Память: 0.49 MB
Время: 0.046 c
3-1106591721
bSava
2005-01-24 21:35
2005.02.20
Can t load library fbclient.dll в Win98


14-1106747016
Derevyanniy kak Rels
2005-01-26 16:43
2005.02.20
А вот как быть в таком случае ?


14-1106602153
Чеширский_Кот
2005-01-25 00:29
2005.02.20
Как вы понимаете второй закон термодинамики?


4-1103657293
Митяй2
2004-12-21 22:28
2005.02.20
Как из программы на Delphi выполнить дозвон к интернету


8-1099345742
dredd
2004-11-02 00:49
2005.02.20
Вопрос по математике