【问题标题】:How to load COM DLL at runtime如何在运行时加载 COM DLL
【发布时间】:2011-02-27 17:37:38
【问题描述】:

我有一个 VB6 COM DLL。我想从 C++ 中使用它。我知道如何注册它,从 DLL 生成一个 tlb 文件,并在 C++ 中#import。

不过,我希望在运行时动态加载和使用这样的 DLL,而无需事先知道它们。这可能吗?

谢谢,

【问题讨论】:

  • 您想避免注册它们,还是避免生成类型库和#importing?或者两者都有(我不确定这是否可能)?

标签: c++ windows visual-studio com vb6


【解决方案1】:

是的,但你需要把问题弄得更清楚。

有时,您确实知道 COM 接口,只是不知道实现。在这种情况下,您可以创建接口的虚拟实现并 #import 。在运行时,您仍然需要注册真正的组件,从中获取一个对象(可能通过CoCreateInstance)并将其存储在适当的智能指针中。

使用 VB6,它就没有那么直接了。这增加了一个间接级别。阅读IDispatch。您需要获取该已知接口来描述未知接口。这样就可以在运行时获取未知接口。

【讨论】:

    【解决方案2】:

    恕我直言,您至少需要一些通用接口(这样您就知道在 C++ 端调用什么)。

    我会这样做:

    1. 定义一个通用接口(在它自己的 DLL/TLB 中)

    2. 在一个或多个 COM 服务器中实现此接口

    3. 在C++端导入这个接口(姑且称之为client

    4. 定义一种方法以在客户端中传递您要使用(动态加载)的 COM 服务器的 progid

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      看看这两个 MSDN 文章 herehere 关于COM 组件的免注册激活。 SO上也有一些类似的问题:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多