如何在运行时加载COM DLL

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

但是,我想要在运行时dynamic地加载和使用这样的DLL,而不必事先知道它们。 这可能吗?

谢谢,

是的,但你需要清楚的问题。

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

使用VB6,它有点不直接。 这增加了一个间接的层次。 阅读IDispatch 。 你需要获得那个已知的接口来描述一个未知的接口。 这样,未知的接口可以在运行时获得。

恕我直言,你至少需要一些通用的接口(所以你知道在C ++端调用什么)。

我会做这样的事情:

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

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

  3. 在C ++端导入这个接口(让我们称之为客户端

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

希望这可以帮助

在这里和这里看看这两个MSDN acrticles有关COM组件免注册激活 。 在这里也有类似的问题:

  • 生成免注册COM的清单文件
  • Windows / C ++:如何使用未注册的COM DLL