barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

четверг, 27 октября 2011 г.

Обращение к COM-объектам из C++

Для того, чтобы в коде C++ обращаться к методам некоторого COM-объекта, нужно следующее:
1) Импортировать tlb COM-объекта, с которым будем работать (импорт этот статический, выполняется на этапе компиляции):
#import "someCom.tlb" raw_interfaces_only
2) Перед началом работы с COM-объектом инициализировать COM, после окончания - деинициализировать:
HRESULT hr = CoInitialize(NULL);
if(SUCCEEDED(hres = CoInitialize(NULL)))
     {
     ... // тут идет создание COM-объекта, вызов его методов
     CoUninitialize();
     }
3) Создать указатель на COM-объект для последующей работы. Пусть COM-объект, с которым мы хотим работать, имеет пространство имен COMObjectNamespace, имя интерфейса COMInterfaceName и имя класса, реализующего этот интерфейс - COMClassName. Тогда создается ссылка на объект так:
     COMObjectNamespace::COMInterfaceNamePtr myComObj(COMObjectNamespace::COMClassName);
Далее полученную ссылку myComObj можно использовать как указатель для вызова методов, VisualStudio даже будет подсказывать объявления методов.

Информация взята отсюда: http://support.microsoft.com/kb/828736, где рассмотрен пример взаимодействия по технологии COM между C++-программой и модулем на C#.

Комментариев нет:

Отправить комментарий