Есть ли способ определить, указывают ли две ссылки на интерфейс COM на один и тот же экземпляр? - PullRequest
2 голосов
/ 27 ноября 2008

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

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


РЕДАКТИРОВАТЬ: Значительные части исходного вопроса, который оказался независимой проблемой, теперь перемещены в новый вопрос .

1 Ответ

8 голосов
/ 27 ноября 2008

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

из Правила объектной модели компонентов :

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

...