Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему в длл не работает try except?? [D6, Win2k]


Страницы:   1 2

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'
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;
и что ? что-то не так ? alla вызывается. сообщение это отладчика, в exe не будет, показывает что exception в raiseAV примерно как если бы MOV EAX,[0] был в ехе, то на нёмбыло бы это сообение

==============================
AV не надо ловить, его надо избегать !


bloodman   (2004-09-02 23:41:00) [19]

а что со 2-м вопросом?


GuAV   (2004-09-02 23:38:00) [20]


> как ты это узнаешь ?

EnumResourceNames. Хотя имхо доджен и так знать.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо