【问题标题】:Using Component Object Model (COM) on non-Microsoft platforms在非 Microsoft 平台上使用组件对象模型 (COM)
【发布时间】:2008-09-17 15:10:00
【问题描述】:

我经常遇到类似的情况: 我有一堆 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 上本地运行的二进制文件)。

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

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

【问题讨论】:

    标签: c++ com cygwin mingw wine


    【解决方案1】:

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

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

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

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

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

    这是我的补丁:

    【讨论】:

    • 只是想知道您的补丁是否可以在某个地方下载?
    • @ezpresso:DispPatch 的修补版本最初丢失在主项目的存储库中(code.google.com/p/captain-bol
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2016-10-13
        • 2017-02-15
        • 1970-01-01
        • 2015-09-09
        • 1970-01-01
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多