2

是否有关于如何基于它们的值(又名私有状态)而不是它们的身份(又名指向 IUnknown 的指针)来比较两个 COM 对象的既定模式?

4

2 回答 2

4

对象相等是一个重要的实现细节,一个在 COM 中很好地隐藏的细节。COM 是一个基于接口的对象模型,这些接口需要实现的事实被小心地隐藏了。它只出现在几个地方,CoCreateInstance() 是显而易见的。不太明显的是 IUnknown 的规则。当您通过任何已实现的接口进行 QI 时,其正确实现要求您将获得相同的 IUnknown 接口指针。这提供了对象身份,而不是对象相等。

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

于 2012-12-20T21:27:24.730 回答
1

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

于 2012-12-20T19:51:39.420 回答