2008-11-27 4 views
2

Учитывая две ссылки на интерфейс, полученные из разных источников. Есть ли программный способ определить, реализованы ли они одним и тем же экземпляром?Есть ли способ определить, указывают ли два COM-интерфейса в одном экземпляре?

Простая проверка равенства ссылок на интерфейс всегда терпит неудачу.


EDIT: Большая часть оригинального вопроса, который оказался независимой проблемой теперь перенесена в a new question.

ответ

8

Вы можете запросить интерфейс IUnknown и сравнить эти указатели. Все остальные указатели интерфейса не гарантируют, что каждый раз возвращают одинаковое значение.

от The Rules of the Component Object Model:

идентичность объекта. Необходимо, чтобы любой вызов QueryInterface на любом интерфейсе для экземпляра данного объекта для конкретного интерфейса IUnknown всегда возвращал одно и то же значение физического указателя. Это позволяет вызывать QueryInterface (IID_IUnknown, ...) на любых двух интерфейсах и сравнивать результаты, чтобы определить, указывают ли они на один и тот же экземпляр объекта (тот же идентификатор COM-объекта).