Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить работать COM в потоке? [D7, WinXP]


Alex_C ©   (2006-03-21 16:07:00) 

Просто в приложении работает отлично
При попытке обращения к серверу из потока выдает: "Не был произведен вызов CoInitialise"
В факах нашел что надо поставить первой строчкой
CoInitFlags := 0;
Application.Initialize;
Сделал. Не работает все равно.


clickmaker   (2006-03-21 17:33:00) [1]


> Alex_C ©   (21.03.06 17:26) [9]

IGlobalInterfaceTable спасет марсианина )
http://www.compdoc.ru/prog/cpp/com/ch5/ch54.shtml


Reindeer Moss Eater   (2006-03-21 17:28:00) [2]

Чего, не можешь перевести с русского на русский?
:)
Боюсь что переводчиков с таким дипломом здесь нет.


Alex_C   (2006-03-21 17:26:00) [3]

Ок! Признаю я - Марсианин!
Только объясните в чем проблема!
Вставил так:
В Execute:
 CoInitialize(nil);
 Далее свою ф-цию. работы с COM

Пишет
" Приложение обратилось к интерфейсу, относящемуся к другому потоку"


Reindeer Moss Eater   (2006-03-21 17:21:00) [4]

Читай внимательно чего ты туда написал и что тебе сказал компьютер написать туда.


Alex_C   (2006-03-21 17:20:00) [5]

Я ж написал - вставил я CoInitialise в поток!


Reindeer Moss Eater   (2006-03-21 17:11:00) [6]

Ты русский или марсианин?
Тебе русским языком компьютер сказал, что не произведен вызов CoInitialise

Произведи вызов CoInitialise


Alex_C   (2006-03-21 17:09:00) [7]

Нашел в инете по этому поводу статью
Сделал так:
в методе Execute;
begin
 CoInitializeEx(NIL, COINIT_MULTITHREADED);
 …
 CoUninitialize
Теперь вылазиет другая ошибка
Приложение обратилось к интерфейсу, относящемуся к другому потоку

Инициализирую интерфейс в теле основной программы. Его там тоже надо использовать. Как быть?


Reindeer Moss Eater   (2006-03-21 16:18:00) [8]

В потоке естественно.


Alex_C   (2006-03-21 16:17:00) [9]

Прошу прощения за тупой вопрос: в каком месте? При создании программы я произвожу ComServ := CoComServ.Create - тут все ок!
А где производить вызов этой ф-ции??


MBo   (2006-03-21 16:09:00) [10]

Ну раз "Не был произведен вызов CoInitialise"
то напрашиваетсф вывод - вызвать эту функцию CoInitialize(nil)


Reindeer Moss Eater   (2006-03-21 16:07:00) [11]

>"Не был произведен вызов CoInitialise"
Дык произведи


Наверх

Титульная страница Поиск, карта сайта Написать письмо