Использование объектной модели компонентов (COM) на платформах не от Microsoft - PullRequest
30 голосов
/ 17 сентября 2008

Я регулярно сталкиваюсь с подобными ситуациями: У меня есть куча COM .DLLs (без IDL-файлов), которые мне нужно использовать, и я вызываю их, чтобы получить доступ к некоторым иностранным (не открытым, недокументированным) форматам данных.

Платформа Microsoft Visual Studio от Microsoft имеет очень хорошие возможности для импорта таких библиотек COM и их использования в моем проекте (директива Visual C ++ #import или выбор и добавление их с помощью диалогов Visual Basic .NET), и это рекомендуемый поставщиками способ использования. им.

Мне было бы интересно найти способ использовать эти библиотеки DLL на платформах разработки не-Microsoft. А именно, используя эти COM-классы в проекте C ++, скомпилированном с MinGW или Cygwin, или даже порте GCC от Wine до linux (компилирует C ++, ориентированный на Win32, в двоичный файл, работающий в Linux).

Я получил некоторый ограниченный успех при использовании этого драйвера, но это не удается в 100% случаев (я не могу использовать COM-объекты, возвращаемые некоторыми методами).

Кто-нибудь имел успех в подобных ситуациях?

Ответы [ 3 ]

22 голосов
/ 31 октября 2008

Отвечаю сам, но мне удалось найти библиотеку perfect для вызовов OLE / COM в компиляторах сторонних разработчиков: disphelper .

(доступно с sourceforge.net по разрешительной лицензии BSD).

Он работает как на C, так и на C ++ (и, следовательно, на любом другом языке с привязками C). Используется синтаксис строки формата в формате printf / scanf .
(Вы передаете все, что хотите, если вы указываете это в строке формата, в отличие от XYDispDriver , который требует, чтобы аргументы точно совпадали с тем, что указано в библиотеке типов).

Я немного изменил его, чтобы он также компилировался под Linux с WineGCC (для создания нативного эльфа Linux из кода Win32), и для автоматической обработки вызовов «по ref» (стандартный disthelper требует от программиста установки его / ее собственный VARIANT).

Моя исправленная версия и исправления доступны на github в виде ветки:

А вот мои патчи:

5 голосов
/ 17 сентября 2008

Проблема с Ole / Com Object Viewer, поставляемым с Visual Studio и Windows SDK, заключается в том, что он создает сломанный .IDL из .DLL, который не может быть скомпилирован MIDL в пару .H / .CPP. .

Собственное переопределение Wine для OleViewer в настоящее время нестабильно и вылетает при попытке использовать эти библиотеки.

0 голосов
/ 17 сентября 2008

Я думаю, что вы можете использовать бесплатный инструмент Ole / Com Object Viewer для создания заголовочных файлов.

...