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

Вниз

Проблема с Word`ом в многопоточноми приложении   Найти похожие ветки 

 
Provodnick ©   (2006-11-07 10:18) [0]

Здравствуйте! Занчит, ситуация следующая. Есть глобальная переменная WA:variant. Создается отдельный поток BeginThread(nil, 0, @CheckKodif, nil, 0, ThID). В нем создается Word.Application вот так:

   try
     WA := CreateOleObject("Word.Application")
   except
     WA:=Null;
     Exit
   end;

   try
     WA.Documents.Add(frmMain.edtCodif.Text, EmptyParam)
   except
     WA.Quit(0, EmptyParam, EmptyParam);
     WA:=Null;
     Exit
   end;

Во-первых, все это не работало, пока в начало функции потока не добавил CoInitialize(nil) - почему?
И второе - хотя переменная WA и глобальна, но после отработки потока Word через нее становится недоступен в основном потоке программы. Пишет "Объект не подключен к серверу". Помоги пожалуйста разобраться!


 
Сергей М. ©   (2006-11-07 11:08) [1]


> пока в начало функции потока не добавил CoInitialize(nil)
> - почему?


Потому что

The CoInitialize function initializes the Component Object Model(COM) library. You must initialize the library before you can call its functions. Applications must call CoInitialize before they make any other COM library
..
You need to call this before you call any of the OLE library functions unless you call the OleInitialize function, which calls CoInitialize internally


> после отработки потока Word через нее становится недоступен
> в основном потоке программы


Все правильно, так и должно быть.
Каждый поток должен создавать свой собственный экз-р объекта олей-автоматизации. Создание оного объекта в одном потоке и последующее использование его в других потоках недопустимо.


 
Provodnick ©   (2006-11-07 11:25) [2]

Да, я почитал MSDN - разобрался. Использование COM-объекта в разных потоках допустимо при Multithreaded Apartment Model. Спасибо.



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

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

Наверх




Память: 0.47 MB
Время: 0.008 c
2-1258701399
Б
2009-11-20 10:16
2010.01.17
Получить кол-во видеопамяти.


1-1233670260
Dot
2009-02-03 17:11
2010.01.17
Каким обр. оптимально реализовать межпрограммное взаимодействие?


15-1258489719
POOP
2009-11-17 23:28
2010.01.17
Хочу написать для моб. телефона


2-1258818660
Wito
2009-11-21 18:51
2010.01.17
Рекурсивный обход дерева


2-1258916487
Palalord
2009-11-22 22:01
2010.01.17
Проблема с использованием стандартного плеера в Delphi