2008-09-17 1 views
29

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

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

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

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

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

ответ

22

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

(имеется в наличии от sourceforge.net по разрешительной лицензии BSD).

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

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

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

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

+3

Просто интересно, если ваши патчи доступны для загрузки где-нибудь? – ezpresso 2012-01-16 19:43:56

0

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

5

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

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

Смежные вопросы