Я регулярно сталкиваюсь с подобными ситуациями: У меня есть куча 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-объекты, возвращаемые некоторыми методами).
У кого-то был успех в подобных ситуациях?





Я думаю, вы сможете использовать бесплатный инструмент 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: пропатченная версия DispPatch изначально была потеряна в основном репозитории проекта (code.google.com/p/captain-bol) Я сделал форк с моим исправленным на github: github.com/DrYak/disphelper
Просто интересно, доступны ли где-нибудь ваши патчи для скачивания?