QueryInterface
Bien qu’il existe des mécanismes par lesquels un objet peut exprimer la fonctionnalité qu’il fournit statiquement (avant d’être instancié), le mécanisme COM fondamental consiste à utiliser la IUnknown
méthode appelée QueryInterface
.
Chaque interface est dérivée de IUnknown
, donc chaque interface a une implémentation de QueryInterface
. Quelle que soit l’implémentation, cette méthode interroge un objet à l’aide de l’interface IID
vers laquelle l’appelant souhaite un pointeur. Si l’objet prend en charge cette interface, QueryInterface
récupère un pointeur vers l’interface, tout en appelant AddRef
également . Sinon, elle retourne le E_NOINTERFACE
code d’erreur.
Notez que vous devez respecter les règles de comptage de référence à tout moment. Si vous appelez Release
un pointeur d’interface pour décrémenter le nombre de références à zéro, vous ne devez pas utiliser ce pointeur à nouveau. Parfois, vous devrez peut-être obtenir une référence faible à un objet (autrement dit, vous pouvez obtenir un pointeur vers l’une de ses interfaces sans incrémenter le nombre de références), mais il n’est pas acceptable de le faire en appelant QueryInterface
suivi de Release
. Le pointeur obtenu de telle manière n’est pas valide et ne doit pas être utilisé. Cela devient plus facilement évident quand _ATL_DEBUG_INTERFACES
est défini, de sorte que la définition de cette macro est un moyen utile de trouver des bogues de comptage de références.