Existe-t-il un moyen de savoir si deux références d’interface COM pointent vers la même instance?
-
11-07-2019 - |
Question
Étant donné deux références d'interface obtenues de sources différentes. Existe-t-il un moyen programmatique de savoir si elles sont implémentées par la même instance?
Une vérification d'égalité simple des références d'interface échoue toujours.
MODIFIER: de grandes parties de la question initiale, qui se révélait être un problème indépendant, ont maintenant été déplacées vers une nouvelle question .
La solution
Vous pouvez rechercher l'interface IUnknown et comparer ces pointeurs. Il n'est pas garanti que tous les autres pointeurs d'interface renvoient la même valeur à chaque fois.
à partir de Règles du modèle d'objet de composant :
Identité d'objet. Tout appel à QueryInterface sur une interface pour une instance d'objet donnée pour l'interface spécifique IUnknown doit toujours renvoyer la même valeur de pointeur physique. Ceci permet d'appeler QueryInterface (IID_IUnknown, ...) sur deux interfaces quelconques et de comparer les résultats pour déterminer s'ils pointent vers la même instance d'un objet (la même identité d'objet COM).