Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизИсключение при создании формы. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c