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

Вниз

Проблема при работе с двумя потоками   Найти похожие ветки 

 
Артем ©   (2003-12-12 05:55) [0]

Уважаемые Мастера!Помогите, пожалуйста, решить такую проблему. Дело в том, что при запуске вторго потока
Delphi выдает следующую ошибку:"Project project1.exe raised exception class EOleSysError with
message "Не был произведен вызов Colnitialize"". Что за Colnitialize? В чем здесь проблема?
Заранее всем благодарен.


 
крот   (2003-12-12 07:04) [1]

CoInitialize + F1


 
Артем ©   (2003-12-12 11:08) [2]

А что это значит, крот?


 
Silver Alex ©   (2003-12-12 11:18) [3]

не морочь себе голову, подключи модуль activex.И в (я так подозреваю) в методе Execute напиши

activex.CoInitialize(nil);
try
...
finally
activex.CoUninitialize;
end;


 
sniknik ©   (2003-12-12 11:22) [4]

это значит в потоке испльзуются COM обьекты (ADO к примеру), которым просто необхотим вызов CoInitialize о чем и пишет в ошибке. (по F1 найдеш исчерпывающую инфу).
обойти это не получится (только скрыть, к примеру добавить какой нибудь модуль (DataModule) в котором этот вызов автоматически при инициализации).


 
Артем ©   (2003-12-12 17:04) [5]

Проблема с Colnitialize исчезла, но появилась новая:
EOleExeption with message "Вызов был отклонен".
Ребята, помогите, пожалуйста, иначе - я без Вас никак.


 
sniknik ©   (2003-12-12 17:16) [6]

> "Вызов был отклонен".
милицию вызывали? обычное дело. если чтото другое то надо знать что и как.


 
Артем ©   (2003-12-12 17:50) [7]

В потоке обращаюсь к TWordApplication и TWordDocument, открываю вордовский файл, выполняю некоторые процедуры... В чем здесь может быть проблема?


 
Silver Alex ©   (2003-12-12 17:58) [8]


> Артем © (12.12.03 17:50) [7]

через Synchronize?может какие-то мьютексы надо?или там критичесиие секции


 
panov ©   (2003-12-12 18:04) [9]

>Артем © (12.12.03 17:50) [7]
А вот теперь без кода уже ничем не помочь...


 
Артем ©   (2003-12-12 18:19) [10]

Вот частично код:
procedure TSearchWordThread.Execute;
var cl,name,path,fileopen:olevariant;
forwd,wr,wholewrd,tr,fndflag:olevariant;
i:longint;
n:Int64;
begin

activex.CoInitialize(nil);
try
cl:=$00000000;
forwd:=false;
wr:=wdFindStop;
wholewrd:=false;
tr:=false;
for i:=0 to l.items.Count-1 do begin
name:=l.items[i].caption;
path:=l.items[i].subitems[0];
fileopen:=path+name;
n:=0;

Wa.Connect;
Wa.Documents.Open(fileopen,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
Wd.ConnectTo(Wa.ActiveDocument);

Wa.Connect;
Wa.Documents.Open(fileopen,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
Wd.ConnectTo(Wa.ActiveDocument);

with wd.range.find do begin
execute(w,tr,wholewrd,tr,tr,tr,forwd,wr,tr,tr,tr,emptyparam,emptyparam,emptyparam,emptyparam);
if found=true then begin
n:=n+1;
fndflag:=true;
while fndflag=true do begin
execute(w,tr,wholewrd,tr,tr,tr,forwd,wr,tr,tr,tr,emptyparam,emptyparam,emptyparam,emptyparam);
if found=true then begin
n:=n+1;
fndflag:=true;end
else fndflag:=false;
end;
end;
end;

wd.close(cl);
wd.disconnect;
wa.quit;
wa.disconnect;
it:=i;
nu:=n;
synchronize(add);
end;
finally
activex.CoUninitialize;
end;
end;

procedure TSearchWordThread.add;
begin
l.Items[it].subitems.add(inttostr(nu));
end;


 
Romkin ©   (2003-12-12 18:29) [11]

ЧТоб тебе вечно пришлось править программы с такими именами переменных!
Вроде все понятно, ты к интерфейсу, созданному в одном потоке, обращаешься из другого. Естественно, будет ругань. Хорошо еще, что не "Критический сбой". Так нельзя, если надо - используй маршалинг


 
Артем ©   (2003-12-12 18:30) [12]

Вот ё-моё! То "Вызов отклонен", то "Размеры после изменения стали слишком малы или велики"...


 
Артем ©   (2003-12-12 18:31) [13]

Romkin, а что такое маршалинг?


 
Romkin ©   (2003-12-12 18:43) [14]

Самое простое - вызывай CreateOleObject в методе Execute, и ошибок не будет.
http://www.techvanguards.com/com/tutorials/tips.asp#Marshal interface pointers across apartments


 
Артем ©   (2003-12-12 18:57) [15]

Romkin, Вы не против будете, если я к Вам по почте обращусь?
P.S. Сегодня уже не будет возможности выйти в инет.



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

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

Наверх




Память: 0.5 MB
Время: 0.023 c
14-86490
Dmitriy O.
2003-12-04 08:29
2003.12.26
Пьяный за рулем !


6-86477
bers
2003-10-28 10:13
2003.12.26
Запуск программ


1-86342
Rip
2003-12-12 19:41
2003.12.26
Смена глифа на кнопках


1-86363
Godness
2003-12-15 20:36
2003.12.26
Вертикальный текст в QReport


14-86486
Alekzzz
2003-12-04 02:25
2003.12.26
Где взять компонент типа MediaPlayer?