2008-09-17 84 views
29

我经常遇到类似的情况: 我有一堆COM .DLL(没有IDL文件),我需要使用并调用它才能访问一些外国(非开放的,未记录的)数据格式。在非Microsoft平台上使用组件对象模型(COM)

微软的Visual Studio平台有很好的功能来导入这样的COM DLL并在我的项目中使用它们(Visual C++的#import指令,或者使用Visual Basic .NET的对话框来挑选和添加它们) - 这是厂商推荐的方法使用它们。

我会对找到一种在非微软开发平台上使用这些DLL的方法感兴趣。也就是说,在使用MinGW或Cygwin编译的C++项目中使用这些COM类,或者甚至是Wine的GCC端口到Linux(将C++针对Win32编译为在Linux上本地运行的二进制文件)。

我使用this驱动程序获得了一些有限的成功,但是在100%的情况下(我不能使用某些方法返回的COM对象),这是不成功的。

有人在类似的情况下有成功吗?

回答

22

回答自己,但我设法找到完美库非Microsoft编译器OLE/COM呼叫:disphelper

(根据许可的BSD许可证,它可从sourceforge.net获得)。

它既适用于C也适用于C++(因此也适用于具有C绑定的其他语言)。它使用了printf/scanf-like format string syntax
(只要你在格式字符串中指定它就可以传递任何内容,不像XYDispDriver需要参数与类型库中指定的内容完全匹配)。

我对它进行了一些修改,使其在Linux下与WineGCC一起编译(从Win32代码生成本地Linux精灵),并自动处理“通过ref”调用(stock disthelper要求程序员设置他/她自己的VARIANT)。

我的补丁版本和补丁可作为GitHub上叉:

这里是我的补丁:

+3

只是想知道你的补丁是否可以下载到某个地方? – ezpresso 2012-01-16 19:43:56

0

我认为你应该可以使用免费工具Ole/Com Object Viewer来制作头文件。

5

与Visual Studio和Windows SDK一起打包的Ole/Com对象查看器的问题是,它会生成.DLL中的损坏.IDL,无法进一步由MIDL将其编译为.H/.CPP对。

Wine自己重新实现OleViewer目前不稳定,并且在尝试使用这些库时崩溃。

相关问题