Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

Как в 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 вся ветка

Форум: "KOL";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.057 c
14-1105411796
Поручик
2005-01-11 05:49
2005.01.30
Посоветуйте игру


3-1103455885
aglar
2004-12-19 14:31
2005.01.30
DBGrid - цветные строки


3-1104311766
ivc_andr
2004-12-29 12:16
2005.01.30
Выкусить последнее слово в строке


14-1105218443
Фагот
2005-01-09 00:07
2005.01.30
ПО для смартфонов


14-1105580718
Kerk
2005-01-13 04:45
2005.01.30
Списки анонимных прокси





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский