Проблема с использованием интерфейса COM в качестве параметра - PullRequest
0 голосов
/ 29 июля 2009

У меня следующая проблема:

У меня есть проекты Проект1 и Проект2 . В Project1 у меня есть интерфейс IMyInterface . В Project2 у меня есть интерфейс IMyInterface2 с методом, который получает указатель на IMyInterface1 .

Когда я использую import "Project1.idl" ; в моем Project2.idl , # включает «Project1.h» появляется в Project2 ___ i.h . Но этот файл даже не существует! Как правильно импортировать интерфейс, определенный в другую библиотеку, в файл idl?

Я попытался заменить # include "Project1.h" на # include "Project1_i.h" или # include "Project1_i.c" , но это дало мне много ошибок.

Я также попытался использовать importlib ("Project1.tlb") и определить мой интерфейс IMyInterface2 в определении библиотеки. Но когда я компилирую Project2PS project, возникает ошибка (что-то вроде dlldata.c не генерируется, если интерфейс не определен).

Я пытался создать пустышку Project1.h . Но когда Project2 ___ i.h скомпилирован, компилятор не может найти MyInterface1 . И если я включу Project1 ___ i.h , я снова получу много ошибок!

Очевидно, это простая проблема, но я не знаю, как ее решить. Я застрял с этим!

Кстати, я использую VS2008 SP1.

Заранее спасибо.

1 Ответ

2 голосов
/ 29 июля 2009

Не включайте файл * _i.c из заголовка. Вы можете сделать это из исходного файла (.cpp) как простой способ связать его.

EDIT

Вы можете обрабатывать отдельные файлы IDL и их продукты совершенно независимо. Нет необходимости беспокоиться об их объединении раньше, чем на этапе, когда вы включаете обычный заголовочный файл, сгенерированный из каждого файла IDL.

Чтобы иметь дело с IDL, вы добавляете его в проект. Это заставляет MIDL работать на нем и выводить файл заголовка. (По умолчанию будут выводиться и другие вещи, но они не обязательны).

Я рекомендую, чтобы ваши файлы IDL записывали свои заголовки в один общий каталог включений, который затем можно добавить в путь включения для любых проектов, которые должны работать с интерфейсами.

Затем просто используйте #include, чтобы получить заголовочный файл для каждого интерфейса, который вам нужен. Поскольку общий каталог include находится в пути проекта, вложенный #include в header2.h сможет получить header1.h.

...