QueryInterface

更新 : 2007 年 11 月

オブジェクトをインスタンス化する前にオブジェクトの機能を静的に公開する機構はありますが、基本的な COM の機構では QueryInterface という IUnknown のメソッドを使用します。

どのインターフェイスも、IUnknown から派生しているため、QueryInterface の実装を持っています。実装にかかわらず、QueryInterface メソッドは、呼び出し側がポインタを必要とするインターフェイスの IID を使用して、オブジェクトに対して照会を行います。オブジェクトがそのインターフェイスをサポートしている場合、QueryInterface はインターフェイスへのポインタを取得し、同時に AddRef を呼び出します。サポートしていない場合、QueryInterfaceE_NOINTERFACE エラー コードを返します。

参照カウント規則には常に従う必要があります。インターフェイス ポインタに対して Release を呼び出して参照カウントを 0 に減らす場合は、そのポインタを再度使用しないでください。ときには、オブジェクトに対して弱い参照を取得する (つまり、参照カウントを増やさずにいずれかのインターフェイスを指すポインタを取得する) ことが必要になる場合もありますが、そのために QueryInterface の後で Release を呼び出すこはできません。この方法で取得したポインタは無効であり、使用できません。_ATL_DEBUG_INTERFACES を定義すると、このようなポインタをさらに簡単に見つけることができます。そのため、参照カウントのバグを見つけるには、このマクロを定義するのが効果的です。

参照

参照

COM の概要

QueryInterface: Navigating in an Object