複合モニカー
モニカーの最も便利な機能の 1 つは、モニカーを連結または構成できることです。 複合モニカーは、他のモニカーの構成であり、部品間の関係を決定できるモニカーです。 これにより、部分パスに相当する 2 つ以上のモニカーを指定して、オブジェクトへの完全なパスをアセンブルできます。 同じクラス (2 つのファイル モニカーなど) または異なるクラス (ファイル モニカーやアイテム モニカーなど) のモニカーを作成できます。 独自のモニカー クラスを記述する場合は、ファイルまたはアイテム モニカーでモニカーを作成することもできます。 複合の基本的な利点は、より単純なモニカーの組み合わせであるすべての可能なモニカーを実装するコードの 1 つの部分を提供することです。 これにより、特定のカスタム モニカー クラスの必要性が大幅に減少します。
異なるクラスのモニカーは互いに構成できるため、モニカーは複数の名前空間を結合する機能を提供します。 ファイル システムは、すべてのアプリケーションがファイル システム パス名を認識するため、ファイルとして格納されるオブジェクトの共通名前空間を定義します。 同様に、コンテナー オブジェクトは、別のコンテナーによって生成された名前を認識しないため、コンテナー オブジェクトに含まれるオブジェクトのプライベート名前空間も定義します。 ファイル モニカーとアイテム モニカーを構成できるため、モニカーではこれらの名前空間を結合できます。 モニカー クライアントは、1 つのメカニズムを使用して、すべてのオブジェクトの名前空間を検索できます。 クライアントはモニカーで IMoniker::BindToObject を呼び出すだけで、モニカー コードは残りの部分を処理します。 複合で IMoniker::GetDisplayName を呼び出すと、個々のすべてのモニカーの表示名を連結して名前が作成されます。
さらに、独自のモニカー クラスを記述できるため、モニカーコンポジションを使用すると、オブジェクトの名前空間にカスタマイズされた拡張機能を追加できます。
場合によっては、特定のクラスの 2 つのモニカーを特別な方法で組み合わせることができます。 たとえば、不完全なパスを表すファイル モニカーと、相対パスを表す別のファイル モニカーを組み合わせて、完全なパスを表す単一のファイル モニカーを形成できます。 たとえば、ファイル モニカー "c:\work\art" は、相対ファイル モニカー ".で構成できます。\backup\myfile.doc" を "c:\work\backup\myfile.doc" に設定します。 これは非ジェネリックコンポジションの一例です。
一方、ジェネリックコンポジションは、クラスに関係なく、任意の2つのモニカーの接続を可能にします。 たとえば、ファイル モニカーにアイテム モニカーを作成することもできますが、もちろん、逆ではありません。
非ジェネリックコンポジションは関係するモニカーのクラスに依存するため、その詳細は特定のモニカー クラスの実装によって定義されます。 新しいモニカー クラスを記述する場合は、非ジェネリックコンポジションの新しい型を定義できます。 これに対し、ジェネリックコンポジションは OLE によって定義されます。 汎用合成の結果として作成されたモニカーは、汎用複合モニカーと呼ばれます。
これら 3 つのクラス、ファイル モニカー、アイテム モニカー、汎用複合モニカーはすべて連携し、最も一般的に使用されるモニカーのクラスです。
モニカー クライアントは IMoniker::ComposeWith を呼び出して、別のモニカーで複合を作成する必要があります。 内部的に呼び出されるモニカーは、ジェネリックコンポジションと非ジェネリックコンポジションのどちらを実行できるかを決定します。 モニカーの実装で汎用コンポジションが使用可能であると判断された場合、OLE はこれを容易にする CreateGenericComposite 関数を提供します。
関連トピック