2010-09-06 109 views

回答

4

您可以在COM中使用聚合实现此功能。

基本上,您创建了一个实现了一些接口的对象,并包装了对内部对象的访问。

通过调用CoCreateInstance创建的内部对象,并将您自己的对象IUnknown作为pUnkOuter参数传递。

如果内部对象支持它(正确地)它将推迟到外部对象的所有接口调用,给你的对象第一次提供任何接口的机会。


需要注意的是可悲的几个COM对象的实际支持聚合 - 因为实施支持(一)很难得到正确,和(b)很难在编写代码来满足一些迫切需要的任何发展模式证明(其中涵盖了大多数当前流行的词汇载体开发方法) - 我遗憾地期望大多数com对象会(在最好的情况下)以E_NOTSUPPORTED响应,或者(在最坏的情况下)有一半测试尝试作为聚合支持,主要导致无限递归一旦它以非平凡的方式使用。

如果您确实发现了一个带有即用型聚合支持的com对象 - 那么您应该在彩票上使用了这种运气。 :P

+2

值得注意的是,从技术上讲,可以用聚合完成的所有事情也可以使用普通的老式委派(手动编写包装或使用工具自动生成)来完成。聚合效率更高。 – 2010-09-06 09:35:16

1

接口可以继承其他接口,但组件不能覆盖另一个组件,除了组合组件,即将其他组件转发到组件组件,然后直接实现“重写”方法。