【发布时间】:2012-12-21 05:27:24
【问题描述】:
关于如何根据两个 COM 对象的值(即私有状态)而不是其身份(即指向 IUnknown 的指针)来比较两个 COM 对象,是否存在既定模式?
【问题讨论】:
关于如何根据两个 COM 对象的值(即私有状态)而不是其身份(即指向 IUnknown 的指针)来比较两个 COM 对象,是否存在既定模式?
【问题讨论】:
对象相等是一个重要的实现细节,一个在 COM 中被很好地隐藏的细节。 COM 是一个基于接口的对象模型,这些接口需要实现的事实被小心地隐藏了。它只出现在几个地方,CoCreateInstance() 是显而易见的。不太明显的是 IUnknown 的规则。当您通过任何已实现的接口进行 QI 时,其正确实现要求您将获得相同的 IUnknown 接口指针。这提供了对象身份,而不是对象相等性。
没有通常用于测试对象相等性的标准 COM 接口类型。你只需要自己做。一个带有 IsEqualTo() 方法的简单方法可以完成工作。或者您可以将该方法添加到您的默认界面中。
【讨论】:
这取决于“私人国家”的定义。 COM 对象不必有一个。如果对象实现IPersist* 系列接口,尤其是。 IPersistStreamInit,那么你可以将save都放到持久化流或者属性包中,然后直接比较存储,比如逐字节比较流。
【讨论】: