比较基于值的COM接口的两个实例

有没有build立模式,如何比较两个COM对象基于它们的值(又名私人状态),而不是他们的身份(又名指向IUnknown)?

对象平等是一个沉重的实现细节,这是一个隐藏在COM中的细节。 COM是基于接口的对象模型,这些接口需要实现的事实被仔细隐藏起来。 它只出现在几个地方,CoCreateInstance()是显而易见的。 IUnknown的规则不太明显。 如果适当的实现需要在通过任何实现的接口进行QI时获得相同的IUnknown接口指针。 这提供了对象标识,而不是对象相等。

没有通常用于测试对象相等的标准COM接口类型。 你只需要自己做。 一个简单的与IsEqualTo()方法完成工作。 或者您可以将该方法添加到您的默认界面。

这取决于“私人国家”的定义。 一个COM对象不一定有一个。 如果对象实现IPersist*系列接口, IPersistStreamInit ,那么你可以将它们保存到持久流或属性包中,然后直接比较存储,比如流的逐字节比较。