我经常遇到类似的情况:我有一堆 COM .DLL(没有 IDL 文件),我需要使用和调用它们才能访问一些外部(非开放、非文档化)数据格式。

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

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

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

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

有帮助吗?

解决方案

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

(它可以从 来源网 根据宽松的 BSD 许可证)。

它适用于 C 和 C++(因此也适用于具有 C 绑定的任何其他语言)。它使用类似 printf/scanf 的 格式化字符串语法.
(只要在格式字符串中指定,您就可以传递任何您想要的内容,这与 XY显示驱动程序 这要求参数与类型库中指定的内容完全匹配)。

我对其进行了一些修改,使其也可以在 Linux 下使用 WineGCC 进行编译(以从 Win32 代码生成本机 Linux elf),并自动处理“by ref”调用(库存 disthelper 要求程序员设置他/她自己的 VARIANT) 。

我的补丁版本和补丁可以作为 github 上的分支获得:

这是我的补丁:

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top