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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
34
0
17 733
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

Просто интересно, доступны ли где-нибудь ваши патчи для скачивания?

ezpresso 16.01.2012 23:43

@ezpresso: пропатченная версия DispPatch изначально была потеряна в основном репозитории проекта (code.google.com/p/captain-bol) Я сделал форк с моим исправленным на github: github.com/DrYak/disphelper

DrYak 25.04.2015 05:26

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