コンポーネントのカテゴリとそのしくみ

コンポーネントカテゴリは、ソフトウェアコンポーネントがサポートし、必要とする機能の領域を識別します。レジストリエントリは、各カテゴリまたは識別された機能領域に対して使用されます。 各コンポーネントカテゴリは、グローバルに一意の識別子 (GUID) によって識別され、コントロールがインストールされると、コントロールのコンポーネントカテゴリIDを使用してシステムレジストリにコントロールとして登録します。詳細はコントロールの自己登録を参照してください。 コントロールの自己登録では、実装するコンポーネントカテゴリと、コントロールを正常にホストするためにコンテナーがサポートする必要があるコンポーネントカテゴリも登録されます。

コントロールコンテナーがユーザーに挿入するコントロールを提供している場合、ユーザーはその環境で適切に機能するコントロールを選択してインスタンス化することしかできません。 たとえば、コントロールコンテナーがデータバインドをサポートしていない場合、コンテナーでは、データバインドコンポーネントカテゴリが必要であることを示すレジストリにエントリがあるコントロールを選択してインスタンス化することはできません。 コントロールの挿入と、レジストリ エントリを処理するための API のコモン ダイアログを使用できます。

コンポーネント カテゴリは累積または排他的ではありません。コントロールは、機能するコンポーネント カテゴリの任意の組み合わせを必要とする場合があります。 コンポーネント カテゴリに必要なエントリがないコントロールは、任意のコントロール コンテナーで機能することが期待され、コントロール コンテナーの特定の機能を必要としない場合があります。

ここでは、次のコンポーネント カテゴリが特定されています。必要に応じて、カテゴリの詳細な仕様が利用可能である場合があります。

  • ISimpleFrameSite コントロールの格納
  • シンプルなデータバインディングは、IPropertyNotifySink インターフェースを通じて行われます。
  • 高度なデータ バインディング (VB4.0 の追加データバインディング インタフェースでサポートされています)。
  • Visual Basic の プライベート インターフェース - IVBFormatIVBGetControl
  • インターネット対応コントロール。
  • ウィンドウなしのコントロール。

これは、カテゴリの明確なリストではありません。新しい要件が特定されると、今後さらにカテゴリが定義される可能性があります。 コンポーネントカテゴリの最新の一覧は、Microsoft から入手できます。この一覧には、Microsoft によって識別されたコンポーネント カテゴリと、ベンダーが Microsoft に通知したその他のコンポーネント カテゴリが反映されています。

コントロールは、できるだけ多くの環境で動作するようにする必要があることに注意してください。 可能な場合は、特定のインターフェイスをサポートしていないコンテナーに配置すると、コントロールの機能が低下する必要があります。 コンポーネントカテゴリの目的は、コントロールが不適切な環境に配置され、コントロールが目的のタスクを達成できない状況を防ぐことです。 一般に、インターフェイスが存在しない場合、コントロールは適切に低下する必要があります。コントロールは、一部の機能が使用できないことをメッセージボックスでユーザーに通知するか、最適なパフォーマンスを得るためにコントロールコンテナーに必要な機能を明確に文書化することを選択できます。

古いコントロールとコンテナーはコンポーネント カテゴリを使用せず、代わりにレジストリ内のコントロールに対して存在するコントロール キーワードに依存することに注意してください。 古いコンテナーで認識されるように、コントロールはレジストリにコントロール キーワードを登録する必要がある場合があります。コントロール開発者は、これを行う前に、コントロールがそのようなコンテナーで正常にホストできることを確認する必要があります。 コンポーネント カテゴリを使用するコンテナーは、コンポーネント カテゴリ DLL がマッピングを処理するため、古いコントロールをホストするためにそれらを正常に使用できます。古いコントロール CATID_ControlV1 には別のカテゴリが存在するため、コンテナーは必要に応じてそれらを除外できます。

コンポーネント カテゴリは Guid によって識別されるため、GUID 生成ツールを使用して生成された独自のカテゴリ ID を持つ特定の機能を提供するコンテナーの可能性があります。 ただし、これにより、コントロールとコンテナーの相互運用性の利点が損なわれる可能性があるため、可能な限り既存のコンポーネントカテゴリを使用することをお勧めします。 ベンダーは、新しいコンポーネントカテゴリを定義するときに、市場の一般的な要件を満たしていることを確認し、ActiveX コントロールの相互運用性の精神に従うことをお勧めします。

コンポーネントのカテゴリ