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

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

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


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

1 ответ

Решение

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

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

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

Другие вопросы по тегам