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

StackOverflow https://stackoverflow.com/questions/84269

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Я немного модифицировал его, чтобы он также компилировался под Linux с WineGCC (чтобы создавать собственный Linux elf из кода Win32) и автоматически обрабатывать вызовы «по ссылке» (стандартный disthelper требует, чтобы программист настроил свой собственный ВАРИАНТ) .

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top