QueryInterface
I když existují mechanismy, kterými může objekt vyjádřit funkce, které poskytuje staticky (před vytvořením instance), základním mechanismem modelu COM je použití IUnknown
metody s názvem QueryInterface
.
Každé rozhraní je odvozeno z IUnknown
, takže každé rozhraní má implementaci QueryInterface
. Bez ohledu na implementaci se tato metoda dotazuje objektu IID
pomocí 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.
Všimněte si, že musíte vždy dodržovat pravidla počítání odkazů . Pokud zavoláte Release
na ukazatel rozhraní ke snížení počtu odkazů na nulu, neměli byste tento ukazatel znovu použít. Občas můžete potřebovat získat slabý odkaz na objekt (to znamená, že můžete chtít získat ukazatel na jedno z jeho rozhraní bez zvýšení počtu odkazů), ale není přijatelné to provést voláním QueryInterface
následované 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 chyby při počítání odkazů.