Главная страница
    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.032 c
1-1105728940
Ilya___
2005-01-14 21:55
2005.01.30
Как получить индекс выделенной пользователем ячейки Excel?


4-1102589793
serg128
2004-12-09 13:56
2005.01.30
Как на WinAPI получить текущий день месяца?


8-1096638857
BDenis
2004-10-01 17:54
2005.01.30
В ShockWaveFlash не работает transparent .


14-1104169299
DiamondShark
2004-12-27 20:41
2005.01.30
Нет слов.


4-1102596395
serg128
2004-12-09 15:46
2005.01.30
Как на WinAPI переименовать файл?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский