Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.48 MB
Время: 0.007 c
3-86242
Слэш
2003-12-04 11:48
2003.12.26
Как составить такой SQL запрос ?


1-86389
FireMan_Alexey
2003-12-15 11:47
2003.12.26
Как можно настроить!


3-86294
Dmitriy
2003-12-02 16:48
2003.12.26
Stringgrid или DBGrid


1-86356
Sash
2003-12-12 14:20
2003.12.26
XPManifest


6-86468
atruhin
2003-10-29 07:35
2003.12.26
Как уничтожить умершие сокеты





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