2008-10-24 47 views
1

我已经看过Microsoft COM和XPCOM,至少从我迄今为止阅读和收集的内容来看,组件中接口的实现必须基本上处于派生所有虚拟接口的单个​​类中。它是否正确?我错过了什么?组件的整体实现可以分为两个对象吗?

有没有办法让多个对象(可能在单独的DLL中)每个都提供了它们的功能,并且仍然能够使用QueryIterface在它们之间自由转换?

我在寻找的是一个具有某些功能的组件,但仍允许外部客户端代码使用(可能)新界面创建该组件的新扩展。理想情况下,这应该在不泄露组件及其实施的当前来源的情况下发生。

回答

1

这应该是可能的,虽然可能不被标准的高级包装所支持。大多数包装(ATL,MFC等)仅支持将COM对象映射到单个类。但是,QueryInterface允许返回不同的指针并调用COM对象代码,因此第一个COM对象可以加载不同的DLL,实例化不同的对象,并返回指向其接口(vtable)的指针。

据我所知,这一切都有可能,你可能只是自己编写了很多低级胶水代码。

0

是的,ATL支持tear-off interfaces 这允许在另一个类中实现接口,该类仅在请求接口时实例化。由于它只传递一个接口,我猜它也可以放入一个单独的DLL中。

(也可以是cached被请求一次后)

相关问题