2

具体的なコンポーネント クラス オブジェクトによって実装されている COM インターフェイスへのポインターを持つと、このインターフェイス (CLSID) を実装する基になるオブジェクトの GUID を取得できますか?

更新 1

より一般的には、次のような関数があり、インターフェイスSetFont(ICanvasFont* font)を実装する基になるオブジェクトがICanvasFont特定のクラス (たとえばMCanvasFont) であるかどうかを判断する方法が必要です。

4

1 に答える 1

4

IUnknown::QueryInterfaceこのインターフェイス ポインタでIPersist、 、IPersistStreamIPersistStreamInitまたはその他のIPersist*インターフェイスのいずれかを取得します。運が良ければ、GetClassIDメソッドはCLSIDクラス識別子を取得します (代替オプションはIProvideClassInfoandIProvideClassInfo::GetClassInfoです)。

この種の情報が存在する必要はないことに注意してください。CLSIDインターフェイス ポインターは、それを実装するクラスになくても有効です。

アップデート。主な目標が提供されたインターフェースで独自の実装を認識することである場合 (「提供されたのICanvasFontは自分のMCanvasFontクラスのインスタンスなのか、それとも何か違うのか?」)、最も簡単で効率的な方法は、追加のプライベート インターフェースをクラス。クエリが成功すると、インスタンスが認識されます。マーシャリングが行われなければstatic_cast、元の C++ ポインターに戻ることさえできます。

于 2012-05-29T13:58:04.600 に答える