具体的なコンポーネント クラス オブジェクトによって実装されている COM インターフェイスへのポインターを持つと、このインターフェイス (CLSID) を実装する基になるオブジェクトの GUID を取得できますか?
更新 1
より一般的には、次のような関数があり、インターフェイスSetFont(ICanvasFont* font)
を実装する基になるオブジェクトがICanvasFont
特定のクラス (たとえばMCanvasFont
) であるかどうかを判断する方法が必要です。
IUnknown::QueryInterface
このインターフェイス ポインタでIPersist
、 、IPersistStream
、IPersistStreamInit
またはその他のIPersist*
インターフェイスのいずれかを取得します。運が良ければ、GetClassID
メソッドはCLSID
クラス識別子を取得します (代替オプションはIProvideClassInfo
andIProvideClassInfo::GetClassInfo
です)。
この種の情報が存在する必要はないことに注意してください。CLSID
インターフェイス ポインターは、それを実装するクラスになくても有効です。
アップデート。主な目標が提供されたインターフェースで独自の実装を認識することである場合 (「提供されたのICanvasFont
は自分のMCanvasFont
クラスのインスタンスなのか、それとも何か違うのか?」)、最も簡単で効率的な方法は、追加のプライベート インターフェースをクラス。クエリが成功すると、インスタンスが認識されます。マーシャリングが行われなければstatic_cast
、元の C++ ポインターに戻ることさえできます。