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