[英]How to load COM DLL at runtime
我有一个 VB6 COM DLL。 我想从 C++ 中使用它。 我知道如何注册它,从 DLL 生成一个 tlb 文件,并在 C++ 中 #import 它。
但是,我想在运行时动态加载和使用这样的 DLL,而不事先知道它们。 这可能吗?
谢谢,
是的,但你需要让问题更清楚。
有时,您确实知道 COM 接口,而不是实现。 在这种情况下,您可以创建接口的虚拟实现并 #import 。 在运行时,您仍然需要注册真正的组件,从中获取对象(可能通过CoCreateInstance
)并将其存储在适当的智能指针中。
使用 VB6,它就不那么直接了。 这增加了一个间接级别。 阅读IDispatch
。 您需要获取该已知接口来描述未知接口。 这样,可以在运行时获取未知接口。
恕我直言,您至少需要一些通用接口(因此您知道在 C++ 端调用什么)。
我会做类似的事情:
定义一个通用接口(在它自己的 DLL/TLB 中)
在一个或多个 COM 服务器中实现此接口
在 C++ 端导入这个接口(我们称之为client )
定义一种在客户端中传递要使用(动态加载)的 COM 服务器的progid的方法。
希望这可以帮助
看看这两篇关于COM 组件免注册激活的MSDN 文章:
StackOverflow 上也有类似的问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.