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

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

Как в dll избежать exception


nester ©   (2004-06-25 12:32:00) 

Я на KOL написал плагин под IE. В этом плагине создается поток отдельный. Если в этом потоке возникает эксцепшн то вылетает весь IE.
try except стоит. Если эксцепшен возникает не в потоке, то IE не вылетает (ну естественно тоже в try-except). Что за грабли? как такое пофиксить?
Для тех кому интересно, то в потоке запрашиваю вебстраничку с помощью Indy(сам под кол адаптировал) и если нет подключения к инету то естественно эксцепшн, try не спасает.


SPeller   (2004-07-05 04:41:00) [1]

Звиняюсь:
procedure ThreaPingExecute( Dummy: Pointer; Sender: PThread );


SPeller   (2004-07-05 04:39:00) [2]

procedure ThreaPingExecute ( Dummy: Pointer; Self: PThread );

И пофиг что ты их не используешь — программе ведь надо приводить регистры в порядок после отработки функции.


nester   (2004-07-03 14:45:00) [3]

2Сокол Зоркий, не помогло:))) вернулся обратно к VCL.
2Владимир. Я читал дето про такое, но ни разу не пробовал. но щас в нете поищу, но так на вскидку... dll-ку да еще и поток то в ней да по шагам то... страшно становиться:)))
Да, товариши. небольшое уточнение, если в try ставить деление на ноль то не вылетает Ж)))) Вылетает только если гетом брать индевой компонентой, похоже в том месте где она райзет эксцепшен нетворк анричебл.


Vladimir Kladov   (2004-07-03 14:27:00) [4]

А Self? А то он неявно использоваться может. Вообще, есть ведь возможность войти в отладку dll и по шагам посмотреть, что там приключается.


nester   (2004-07-03 13:57:00) [5]

Спасибо зоркий сокол, щас проверю, но пока вериться с трудомс:))) я то сендер нигде не использую


Gandalf   (2004-07-02 19:15:00) [6]

Зоркий сокол дело говорит...


SPeller   (2004-07-02 05:28:00) [7]

http://kol.mastak.ru/FAQ.htm#10


RA   (2004-07-01 20:19:00) [8]

Если ничего не получится, попробуй вынести
падающий код "за поток" методом Synchronize.


nester   (2004-06-27 23:16:00) [9]

Кот в студии: :)

procedure ThreaPingExecute;
var
 i: integer;
begin
 try
   i:= 5/0;
 except
 end;
end;
...
 ThreadPing:= NewThread;
 ThreadPing.AutoFree:= true;
 ThreadPing.OnExecute:= TOnThreadExecute(MakeMethod(nil,@ThreaPingExecute));
 ThreadPing.Resume;
...

код искусственный, надеюсь остальной код не потребуется? а то както в ломы выдирать все лишнее, чтобы понятнее было.
В двух словах еще раз: есть дллка для IE. в одном из мест ее вызывается ThreadPing:= .... т.е. создается тред. В треде искуственно вызываю ошибку делением на ноль, но защищаю траем. Вердикт: IE дохнет падла. Делаю тоже самое на VCL
и все работает. То же самое на VCL:

TPluginStartUpThread = class(Classes.TThread)
private
 { Private declarations }
protected
 procedure Execute; override;
end;
...
procedure TPluginStartUpThread.Execute;
begin
 try
   i:= 5/0;
 except
 end;
end;

...

with TPluginStartUpThread.Create(false) do
 FreeOnTerminate:= true;

так IE даже не икается:))


SPeller   (2004-06-26 07:06:00) [10]

Код в студию.


nester   (2004-06-26 02:15:00) [11]

HET


RA   (2004-06-25 18:53:00) [12]

А замены системных модулей ты используешь?


nester   (2004-06-25 13:53:00) [13]

ХеХе, для чистоты эксперимента переписал тоже самое на VCLовском треде - все работает без проблем. Но блин, а с КОЛовским тогда что?


nester   (2004-06-25 13:40:00) [14]

Да


SPeller   (2004-06-25 12:58:00) [15]

err подключен?


Наверх

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