Форум: "Основная";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];
ВнизПроблема при работе с двумя потоками Найти похожие ветки
← →
Артем (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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.02 c