![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему в длл не работает try except?? [D6, Win2k]
bloodman © (2004-09-02 21:36:00)Когда происходит исключение в блоке try except , то все равно показывается AV и програ вылетает( try except в dll) .
Mim1 (2004-09-04 06:43:00) [1]
> [31] GuAV © (04.09.04 00:04)
Вынужден с вами согласится. Щас можно холивар развести про то надо ли проверять или нет. :)
Из модуля system
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
GuAV (2004-09-04 00:04:00) [2]Mim1 © (03.09.04 19:13) [23]
> ResStream.Free;> end;
>
> Во втором выделеным жирным болке нехватает проверки на nil;
Да Вы что ? Именно там она есть !
Хотя код всё равно кривой, а некривой привел Digitman.
bloodman (2004-09-03 19:52:00) [3]Это понятно. Ладно .СПАСИБО ВСЕМ! .
Mim1 (2004-09-03 19:42:00) [4]
> вызывать метод несуществующего класса не есть гут.
Несуществующего объекта ессно
Mim1 (2004-09-03 19:41:00) [5]незнаю что он выполнет (тут когдато псали что выполняет, убедится можно в исходниках, мне лень), но вызывать метод несуществующего класса не есть гут.
bloodman (2004-09-03 19:30:00) [6]вообщем понял ... дырямые у мя алгоритмы получаются... :(
А зачем там проверка на nil разве free ее не выполняет?
Mim1 (2004-09-03 19:25:00) [7]Тока без рифмы гусары, здесь дамы иногда бывают.
Mim1 (2004-09-03 19:23:00) [8]Где?
bloodman (2004-09-03 19:21:00) [9]ВО а говорили не нужна проверка...
Mim1 (2004-09-03 19:13:00) [10]
> ResStream :=nil;
> try
> try
> ResStream:=TResourceStream.CreateFromID(HInstance,1,RT_RCDATA);
> except
> //error
> end;
> IF ResStream <> nil Then> begin
> MyIcon:=TIcon.Create;
> MyIcon.LoadFromStream(ResStream);
> imge.AddIcon(MyIcon);
> MyIcon.Free;
> end;
> finally
> ResStream.Free;> end;
Во втором выделеным жирным болке нехватает проверки на nil;
bloodman (2004-09-03 18:13:00) [11]GuAV © (03.09.04 16:30) [19]
Это понятно что любой может не создаться, ты каждый конструктор в try заносишь?
Digitman © (03.09.04 16:32) [21]
В моем коде просто без проверки не получится. Буду использовать твой. Он мне больше понавился =) спасибо.
Digitman (2004-09-03 16:32:00) [12]
> bloodman © (03.09.04 16:25) [18]
> А разве стрим на nil проверять не надо?
а зачем ? ты сам себе в состоянии это вразумительно объяснить ?
какие у тебя сомнения, приводящие к такой необходимости ?
> Зачем это:
> try
> MyIcon:=TIcon.Create;
> Разве бывает что TIcon нельзя создать?
ну а почему нет ? все что угодно может случиться ..
к тому же этот try относится к finally, в котором ResStream будет БЕЗУСЛОВНО уничтожен, ЧТО БЫ НИ СЛУЧИЛОСЬ между try..finally
GuAV (2004-09-03 16:32:00) [13]
> будет создана, то AV
то есть какое нафиг AV? Не AV, другое исключение какое нить.
GuAV (2004-09-03 16:30:00) [14]
> А разве стрим на nil проверять не надо?
не надо. если не будет создана, то AV
> Разве бывает что TIcon нельзя создать?
да. Ticon например содержит поля => памяти может нехватить.
Любой конструктор может не состоятся.
bloodman (2004-09-03 16:25:00) [15]А разве стрим на nil проверять не надо? Зачем это:
try</B
MyIcon:=TIcon.Create;
Разве бывает что TIcon нельзя создать?
Digitman (2004-09-03 08:41:00) [16]
> bloodman
что-то ты мудришь ...
try
ResStream:=TResourceStream.CreateFromID(HInstance,1,RT_RCDATA);
try
MyIcon:=TIcon.Create;
try
MyIcon.LoadFromStream(ResStream);
imge.AddIcon(MyIcon);
finally
MyIcon.Free;
end;
finally
ResStream.Free;
end;
except
on e: Exception do
ShowMessage('Обнаружено и обработано исключение ' + e.ClassName + #10 + e.Message);
end;
bloodman (2004-09-03 00:51:00) [17]а у меня блин не работает если в блоке try есть эксепшн то сразу либо вылетает на try программы если он есть либо вообще вылетет..
странно.
GuAV (2004-09-02 23:51:00) [18]
> 1)а ты пнапиши в except код какой-нибудь .
> 2) и в функциях Button... напиши try raiseAV except alla
> end;
> Что происходит?
procedure raiseAV; external 'project1.dll'и что ? что-то не так ? alla вызывается. сообщение это отладчика, в exe не будет, показывает что exception в raiseAV примерно как если бы MOV EAX,[0] был в ехе, то на нёмбыло бы это сообение
procedure raiseAVh; external 'project1.dll'
procedure TForm1.Button2Click(Sender: TObject);
begin
raiseAVh
end;
procedure alla;
begin
Form1.Caption:='zzz';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
raiseAV
except
alla
end;
end;
==============================
AV не надо ловить, его надо избегать !
bloodman (2004-09-02 23:41:00) [19]а что со 2-м вопросом?
GuAV (2004-09-02 23:38:00) [20]
> как ты это узнаешь ?
EnumResourceNames. Хотя имхо доджен и так знать.