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

Вниз

Как в dll избежать exception   Найти похожие ветки 

 
nester   (2004-06-25 12:32) [0]

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


 
SPeller ©   (2004-06-25 12:58) [1]

err подключен?


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

Да


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

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


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

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


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

HET


 
SPeller ©   (2004-06-26 07:06) [6]

Код в студию.


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

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

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 даже не икается:))


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

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


 
SPeller ©   (2004-07-02 05:28) [9]

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


 
Gandalf ©   (2004-07-02 19:15) [10]

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


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

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


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

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


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

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


 
SPeller ©   (2004-07-05 04:39) [14]

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

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


 
SPeller ©   (2004-07-05 04:41) [15]

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



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
1-1105773319
Dr. Genius
2005-01-15 10:15
2005.01.30
Из BMP в TGA, PCX


9-1097928173
NightFire
2004-10-16 16:02
2005.01.30
Вопрос про ваши игры


1-1106093919
AlexLine
2005-01-19 03:18
2005.01.30
TreeView


1-1105640042
Серьезный Сэм
2005-01-13 21:14
2005.01.30
Исходный HTML-код в TWebBrowser


4-1102570024
NetDigger
2004-12-09 08:27
2005.01.30
Работа с окнами