C # – Comment tester au moment de l’exécution quelle coclasse COM a été utilisée pour instancier une interface?

Supposons que vous ayez une interface COM ICOMInterface implémentée par coclasses Coclass1 et Coclass2 . Aucune de ces coclasses n’a d’interface propre (par souci de simplicité et pour illustrer mon propos).

En C #, vous pouvez créer une instance d’une interface COM à partir d’une coclasse comme ceci:

 ICOMInterface myComInterface = new Coclass1(); 

Maintenant, comment pouvez-vous déterminer si myComInterface été instancié par Coclass1 ou Coclass2 ?

L’utilisation de l’instruction “is” comme suit renvoie toujours la valeur true et, en tant que telle, est inutile à cette fin.

 Debug.WriteLine(myComInterface is Coclass1) // writes "True" Debug.WriteLine(myComInterface is Coclass2) // writes "True" 

Cela fonctionnerait si je testais des interfaces, pas des coclasses, mais ces coclasses n’ont pas d’interfaces autres que celle qu’ils implémentent, ICOMInterface .

J’espère qu’il y a une réponse simple à ce scénario plutôt générique que je néglige, sinon je peux poster des détails plus spécifiques si nécessaire.

Merci de votre aide!

Si l’object COM implémente l’interface IPersist , vous pouvez obtenir son CLSID via la IPersist::GetClassID() . C’est peut-être tout ce dont vous avez besoin pour savoir dans quelle classe vous travaillez. Vous pouvez également obtenir le ProgID lisible par l’homme via la méthode ProgIDFromCLSID() .

Voir ici: C # Obtenir le progID de l’object COM