Подтвердить что ты не робот

Использование Component Object Model (COM) на платформах, отличных от Microsoft

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Реальная реализация OleViewer в настоящее время нестабильна и сбой при попытке использовать эти библиотеки.

Ответ 3

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