Share via


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.

Voir aussi

Introduction à COM
QueryInterface: navigation dans un objet