Объявление указателя COM-интерфейса без заголовочного файла - PullRequest
1 голос
/ 20 декабря 2011

Я пишу приложение, используя C # и WinForms.У меня есть элемент управления ActiveX, предоставленный третьей стороной.Я перетаскиваю элемент управления ActiveX в форму и получаю экземпляр класса (называемого «Widget»), который реализует этот элемент управления.

Теперь мне нужно передать указатель интерфейса IWidget из C # в унаследованный C ++код.Я планирую поместить код C ++ в dll и вызвать его из C #, используя P / Invoke.Проблема в том, что я не знаю, как предоставить определение IWidget для кода C ++.Первоначальные авторы кода C ++ имели заголовочные файлы (скажем, widget.h), поэтому они могли #include widget.h и объявить указатель IWidget.

У меня нет .h (и могу 'не понимаю)У меня есть только ActiveX.Итак, как я могу объявить указатель IWidget в моей dll?

Пока что моя единственная идея - создать файл IDL из dll ActiveX.Это разумный подход?

Спасибо, Марк

1 Ответ

0 голосов
/ 20 декабря 2011

Вы можете попробовать импортировать метаданные из ActiveX с помощью tlbimp.exe, который создает управляемую сборку, и IWidget должен быть там. Если вы создаете класс с этой управляемой версией интерфейса и [ClassInterface (ClassInterfaceType.AutoDispatch)], он должен пройти через ActiveX.

См. Инструкции для tlbimp activex-wrap

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...