2011-01-16 4 views
1

Как я могу назвать COM-интерфейс из проекта ATL?Вызов пользовательского COM-интерфейса из проекта ATL

Я следовал примеру в http://www.codeproject.com/KB/COM/comintro.aspx, но они используют класс IActiveDesktop, который определен в wininet.h. Как вызвать пользовательский компонент, где у меня нет определения интерфейса. Как это сделать?

В проекте MFC я могу сгенерировать класс MFC из TypeLib. Но что мне нужно сделать для создания моего заголовка из TypeLib в проекте ATL?

ответ

1

Если вы хотите вызвать сторонний COM-компонент, вам не нужно связывать файл определения (.idl) для этого компонента. Используйте класс CComPtr ATL, который инкапсулирует типичные вещи, которые используются с любым COM-объектом, таким как CoCreateInstance и QueryInterface. существует также специализированная специализация для IDispatch, которая упрощает использование CComPtr с элементами ActiveX.

CComPtr p; 
static CLSID id = { 0xcf9904f7, 0x8623, 0x465b, { 0xa0, 0x5e, 0x9d, 0x5a, 0xa, 0x2c, 0x1a, 0xe7 } }; 
p.CoCreateInstance(id); 
+0

Будет полезно использовать функцию через интерфейс, а не маршрутизировать через IDispatch. – YeenFei

+0

Не могли бы вы привести небольшой пример? Для QueryInterface я должен иметь GUID и определение интерфейса. Где я могу получить определение Interfache для моей третьей стороны dll? – Jan

+0

@Jan: Вам не требуется определение интерфейса как таковое, вам просто нужна документация для интерфейса, поэтому вы можете узнать, какие методы доступны на интерфейсе. Убедитесь, что ваш компонент правильно зарегистрирован в реестре машины. – ThomasMcLeod