Есть ли способ определить, указывают ли две ссылки на интерфейс COM на один и тот же экземпляр?
Даны две интерфейсные ссылки, полученные из разных источников. Есть ли программный способ узнать, реализованы ли они одним и тем же экземпляром?
Простая проверка на равенство ссылок интерфейса всегда терпит неудачу.
РЕДАКТИРОВАТЬ: большие части первоначального вопроса, который оказался независимой проблемой, теперь перенесены на новый вопрос.
1 ответ
Вы можете запросить интерфейс IUnknown и сравнить эти указатели. Все остальные указатели интерфейса не гарантированно возвращают одно и то же значение каждый раз.
из Правил объектной модели компонентов:
Идентичность объекта. Требуется, чтобы любой вызов QueryInterface на любом интерфейсе для данного экземпляра объекта для определенного интерфейса IUnknown всегда возвращал одно и то же значение физического указателя. Это позволяет вызывать QueryInterface(IID_IUnknown, ...) для любых двух интерфейсов и сравнивать результаты, чтобы определить, указывают ли они на один и тот же экземпляр объекта (одинаковую идентификацию COM-объекта).