我有一个VB6 COM DLL。我想从C ++中使用它。我知道如何注册它,从DLL生成一个tlb文件,并在C ++中#import它。
但是,我想在运行时动态加载和使用这样的DLL,而不事先知道它们。这可能吗?
谢谢,
答案 0 :(得分:4)
是的,但你需要让问题更清楚。
有时,您事先知道COM接口,而不是实现。在这种情况下,您可以创建接口的虚拟实现和#import。在运行时,您仍然可以注册真实组件,从中获取对象(可能通过CoCreateInstance
)并将其存储在适当的智能指针中。
使用VB6,它不那么直接。这增加了一个间接层。阅读IDispatch
。您需要获取该已知接口来描述未知接口。这样,可以在运行时获得未知接口。
答案 1 :(得分:2)
恕我直言,你至少需要一些通用接口(所以你知道在C ++方面要调用什么)。
我会做类似的事情:
定义一个公共接口(在其自己的DLL / TLB中)
在一个或多个COM服务器中实现此接口
在C ++端导入此界面(我们称之为客户端)
定义一种方法来传递您要在客户端中使用的COM服务器的 progid (动态加载)。
希望这有帮助
答案 2 :(得分:1)