我见过Microsoft COM和XPCOM,至少从我到目前为止所阅读和收集的内容来看,组件中接口的实现必须基本上是在派生所有虚拟接口的单个类中。它是否正确?我错过了什么?
有没有办法让多个对象(可能在单独的DLL中)各自提供它们的功能,并且仍然能够使用QueryIterface在它们之间自由转换?
我正在寻找的是拥有一个具有某些功能的组件,但仍允许外部客户端代码使用(可能)新接口创建组件的新扩展。理想情况下,这应该在不泄露组件的当前源及其实现的情况下发生。
答案 0 :(得分:1)
这应该是可能的,尽管标准的高级包装可能不支持。大多数包装器(ATL,MFC等)仅支持将COM对象映射到单个类。但是,允许QueryInterface返回不同的指针并调用COM对象代码,因此第一个COM对象可以加载不同的DLL,实例化不同的对象,并返回指向它的接口的指针(vtable)。
据我所知,你可能会自己编写很多低级粘合代码。
答案 1 :(得分:0)
是的,ATL支持tear-off interfaces 这允许在仅在请求接口时实例化的另一个类中接口接口。由于它只传递一个接口,我想它也可以放入一个单独的DLL中。
(请求一次后也可以是cached)