QueryInterface
Ačkoli existují mechanismy, pomocí kterých objekt může vyjádřit funkce, které poskytuje staticky (před vytvořením instance), základním mechanismem MODELU COM je použít metodu IUnknown
volanou QueryInterface
.
Každé rozhraní je odvozeno z IUnknown
, takže každé rozhraní má implementaci QueryInterface
. Bez ohledu na implementaci tato metoda dotazuje objekt pomocí IID
rozhraní, na které volající chce ukazatel. Pokud objekt podporuje toto rozhraní, QueryInterface
načte ukazatel na rozhraní a zároveň volá AddRef
. V opačném případě vrátí E_NOINTERFACE
kód chyby.
Mějte na paměti, že vždy musíte dodržovat pravidla počítání odkazů. Pokud zavoláte Release
ukazatel rozhraní, který sníží počet odkazů na nulu, neměli byste tento ukazatel znovu použít. Někdy může být nutné získat slabý odkaz na objekt (to znamená, že chcete získat ukazatel na jedno z jeho rozhraní bez zvýšení počtu odkazů), ale není přijatelné to udělat voláním QueryInterface
následovaným Release
. Ukazatel získaný takovým způsobem je neplatný a neměl by být použit. To se snadněji projeví, když _ATL_DEBUG_INTERFACES
je definováno, takže definování tohoto makra je užitečný způsob, jak najít počet chyb odkazů.