Использование объектной модели компонентов (COM) на платформах не от Microsoft

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

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

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

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

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам