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