使用可能なコンポーネントの数が増えるにつれて、これらのコンポーネントの管理がますます困難になります。 公開するインターフェイスと実行するタスクに関しては、多くのコンポーネントで同様の機能が提供されます。
多くの場合、特定のコンテキストで使用できるコンポーネントを列挙する必要があります。 たとえば、OLE 複合文書で使用される [オブジェクト の 挿入] ダイアログ ボックスと、OLE コントロールで使用される [挿入コントロール] ダイアログ ボックスがあります。 これらのダイアログ ボックスには、複合ドキュメントまたはコントロールのインターフェイス コントラクトを満たす (または満たすと要求する) すべてのコンポーネントが一覧表示されます。 これらの既存のカテゴリ (OLE ドキュメント、OLE コントロール) は、正確なインターフェイスシグネチャを意味するものではありません。 OLE ドキュメントでは、特定のコア インターフェイスセット (IOleObjectや IPersistStorageなど) を公開する必要がありますが、IOleLinkなどの追加のインターフェイスを公開することもできます。
以前は、コンポーネントに対応する HKEY_CLASSES_ROOT\CLSID\{...} レジストリ キーに、人間が判読できる名前 ("Insertable"、"Control"など) をサブキーとして追加することで、コンポーネントにタグが付けられていた。 これは、カテゴリの中央定義に適していますが、多くの独立したパーティが新しいカテゴリを定義する場合に名前の競合が発生するリスクがあります。 COM の他の領域と同様に、拡張可能な名前空間を提供するソリューションは、グローバル一意識別子 (GUID) の使用にあります。 人間が判読できる名前を使用する代わりに、一意の番号 (CATID) が各カテゴリに割り当てられます。
既存の分類のもう 1 つの制限事項は、コンポーネント自体の機能を表現することに限定されるということです。 多くのコンポーネントには、コンテナーの特定の機能が必要です。 このようなコンポーネントがコンテナーに挿入されると、コンポーネントがそのカテゴリの 1 つによって暗黙的に指定されたコントラクトを満たしている場合でも、挿入が失敗したり、予期せず動作したりする可能性があります。 特定の状況で正常に使用できるコンポーネントを列挙するには、コンポーネントとコンテナーの両方の機能を考慮する必要があります。
これらの考慮事項により、既存の分類に次の変更が加えられました。
- カテゴリは、グローバルに一意の識別子である CATID を使用して示されます。
- HKEY_CLASSES_ROOT\CLSID レジストリ キーのサブキー コンポーネントの下で、"実装されたカテゴリ" と "必要なカテゴリ" という 2 つのサブキーが開発されました。 これらのサブキーには、コンポーネントによって提供される CATID のリスト、またはコンポーネントのコンテナーが提供する必要がある CATID のリストが含まれています。
コンポーネントカテゴリの管理を容易にするために、カテゴリはレジストリの中央の場所に一覧表示されます: HKEY_CLASSES_ROOT\Component Categories. このキーは、インストールされているカテゴリを CATID とローカライズされた人間が判読できる名前の両方で一覧表示します。
詳細については、次のトピックを参照してください。
- コンポーネント機能別の分類
- コンテナー機能別の分類
- コンポーネント カテゴリ マネージャー を する
- 既定のクラスと関連付けの を する
- コンポーネント カテゴリの定義 の
- アイコンとカテゴリ の関連付けを する