当前位置:  开发笔记 > 编程语言 > 正文

在非Microsoft平台上使用组件对象模型(COM)

如何解决《在非Microsoft平台上使用组件对象模型(COM)》经验,为你挑选了2个好方法。

我经常遇到类似的情况:我有一堆COM .DLL(没有IDL文件),我需要使用它并调用它们来访问一些外来的(非开放的,未记录的)数据格式.

Microsoft的Visual Studio平台具有非常好的功能,可以导入这些COM DLL并在我的项目中使用它们(Visual C++的#import指令,或使用Visual Basic .NET的对话框挑选和添加它们) - 这是供应商推荐的使用它们的方法.

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

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

有人在类似情况下取得了成功吗?



1> DrYak..:

回答自己,但我设法在非Microsoft编译器中找到完美的OLE/COM调用库:disphelper.

(它可以在许可的BSD许可下从sourceforge.net获得).

它既适用于C和C++(也适用于任何其他带有C绑定的语言).它使用类似printf/scanf的格式字符串语法.
(只要您在格式字符串中指定它,就可以传递任何所需内容,这与XYDispDriver不同,后者要求参数与类型库中指定的内容完全匹配).

我对它进行了一些修改,以便在Linux下使用WineGCC进行编译(用Win32代码生成本机Linux精灵),并自动处理"by ref"调用(库存disthelper需要程序员设置他/她自己的VARIANT) .

我的修补版本和补丁在github上作为fork提供:

https://github.com/DrYak/disphelper

以下是我的补丁:

单一来源的补丁

拆分源补丁


只是想知道你的补丁是否可以在某处下载?

2> DrYak..:

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

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

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有