如何在运行时加载COM DLL

时间:2010-06-04 10:35:34

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

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

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

谢谢,

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

我会做类似的事情:

  1. 定义一个公共接口(在其自己的DLL / TLB中)

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

  3. 在C ++端导入此界面(我们称之为客户端

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

  5. 希望这有帮助

答案 2 :(得分:1)

请查看关于 免费激活COM组件 的这两个MSDN细分herehere。 SO上也有一些类似的问题: