2016-07-19 2 views
-1

MSDN имеет ссылку, что язык C также может использоваться для создания и использования COM-объектов.Есть ли способ использовать/вызывать COM-интерфейсы в C?

Я прошел через CodeProject here и обнаружил, что созданы соответствующие файлы заголовков, и они будут включены в любое приложение C, которое вызывает эти COM-интерфейсы.

Все объекты COM из Windows будут иметь похожие соответствующие заголовочные файлы?

Или есть ли другой способ вызова COM-интерфейсов с C?

+0

Если вы построили правильно, вероятно, с помощью компилятора языка определения интерфейса (MIDL), то да, будут соответствующие определения интерфейса C. Вы уже на правильном пути. И fyi, COM из C - это * боль *, но это выполнимо, тем не менее. – WhozCraig

+0

COM ** разработан ** для вызова с C. Если соответствующие файлы заголовков отсутствуют, вам придется вручную восстановить lpVtbl. Записи сортируются в том же порядке, в котором они объявлены, причем базовые интерфейсы идут первыми. – IInspectable

+0

Возможно, практика запрещена Женевской конвенцией о правах программиста. Мы подписываемся на это здесь, вы редко получаете полезную помощь, когда сталкиваетесь с неприятностями. У вас будут проблемы. –

ответ

1

Все объекты COM из Windows будут иметь похожие соответствующие заголовочные файлы?

Все файлы заголовков, сгенерированные из Microsoft Interface Definition Language файла с помощью MIDL compiler будет содержать определения для использования программами C. См. C/C++-Compiler Considerations:

Сгенерированный файл .h имеет как определения стиля C, так и C++.

Я не знаю, если всех COM объекты, которые поставляются с ОС Windows или Windows SDK поставляется с предварительно встроенными заголовками для использования программ C, но это, конечно, было бы разумно предположить, поэтому. Если вы обнаружите интерфейс, для которого нет определения интерфейса C-стиля, вы всегда можете запустить компилятор MIDL для файла .idl.

Или есть ли способ вызова COM-интерфейсов с C?

Некоторые реализации COM-интерфейса также поставляются как type libraries (.TLB). Вы можете #import TLB в свой код на C++. Это создает первичный файл заголовка (.tlh), который вы можете использовать для восстановления определения интерфейса в стиле C.

Смежные вопросы