コントロールとコントロールコンテナーのガイドラインの概要
ActiveX コントロールは、基本的に IUnknown インターフェイスをサポートする単純な OLE オブジェクトです。 通常、機能を提供するためにさらに多くのインターフェイスをサポートしますが、追加のインターフェイスはすべてオプションとみなされ、そのため、コントロール コンテナーはサポートされている追加のインターフェイスに依存すべきではありません。 コントロールがサポートする必要がある追加のインターフェイスを指定しないことにより、コントロールとしての資格を得るために特定のインターフェイスをサポートする必要がなく、コントロールは機能の特定の領域を効率的にターゲットにすることができます。 OLE の場合と同様、コントロール内であってもコントロール コンテナー内であっても、インターフェイスが利用可能であると想定すべきではなく、標準の戻り値チェック規則に常に従う必要があります。 コントロールまたはコントロール コンテナーが適切に機能を低下させ、必要なインターフェイスが利用できない場合に代替機能を提供することが重要です。
ActiveX コントロール コンテナーは、最小限の ActiveX コントロールをホストできる必要があります。また、 コンテナーで指定されている多数の追加インターフェイスもサポートされます。 コンテナーが必要に応じてサポートできるインターフェイスとメソッドは多数あり、コンポーネント カテゴリと呼ばれる機能領域にグループ化されます。 コンテナーは、コンポーネント カテゴリの任意の組み合わせをサポートできます。たとえば、コンポーネント カテゴリはデータバインディング用に存在しますが、コンテナーの市場ニーズに応じて、コンテナーはデータ バインド機能をサポートする場合とサポートしない場合があります。 コントロールでコンテナーから機能へのデータ バインドのサポートが必要な場合は、レジストリにこの要件が入力されます。 これにより、コントロール コンテナーは、正常にホストできることを認識しているコントロールのみを挿入できます。 コンポーネント カテゴリは OLE の一部として指定されており、ActiveX コントロールに固有のものではないことに注意することが重要です。コントロール アーキテクチャでは、コンポーネント カテゴリを使用して、OLE コンポーネントがサポートする機能の領域を識別します。 コンポーネント カテゴリは累積的または排他的ではないため、コントロール コンテナーは、必ずしも別のカテゴリをサポートしなくても、1 つのカテゴリをサポートできます。
オプションの機能や特定のコンテナーに固有の機能を必要とするコントロールについては、それらの要件を明確にパッケージ化して販売することが重要です。 同様に、特定の機能またはコンポーネント カテゴリを提供するコンテナーは、ActiveX コントロールをホストするときにそれらのレベルのサポートを提供するものとしてマーケティングおよびパッケージ化する必要があります。 コントロールは、できるだけ多くのコンテナーを対象にしてテストし、インターフェイスやメソッドが使用できない場合は、より少ない機能または代替の機能を提供するように適切に機能を低下させることをお勧めします。 コントロールがコンポーネント カテゴリのサポートなしでは指定されたジョブ機能を実行できない状況では、コントロールが不適切なコンテナーに挿入されるのを防ぐために、そのカテゴリを要件としてレジストリに入力する必要があります。
これらのガイドラインでは、コントロールコンテナーでサポートされる可能性があるインターフェイスとメソッドを定義しますが、常に、QueryInterface やその他のメソッドを使用してこれらのインターフェイスへのポインターを取得する場合は、コントロールが戻り値をチェックする必要があります。 コンテナーでは、コントロールが IUnknown インターフェイス以上のものをサポートすることを想定しないでください。これらのガイドラインでは、コントロールがサポートできるインターフェイスと、特定のインターフェイスの存在が何を意味するかを特定します。
ActiveX コントロールとコントロール コンテナーのガイドラインが重要な理由
ActiveX コントロールは、ソフトウェア開発ツールからエンドユーザー生産性ツールに至るまで、さまざまなコンテナーで使用するプログラム可能なソフトウェア コンポーネントを開発するための主要なアーキテクチャになっています。 コントロールがさまざまなコンテナーで適切に動作するためには、コントロールは、すべてのコンテナーで依存できる最小限の機能レベルを想定できなければなりません。
これらのガイドラインに従うことで、コントロールとコンテナーの開発者は、コントロールとコンテナーの信頼性と相互運用性を高め、最終的にはコンポーネント ベースのソリューションを構築するためのより優れた、より使いやすいコンポーネントを作成できます。
必要なインターフェイスが利用できない場合の対応
OLE プログラムでは、QueryInterface を使用してインターフェイス ポインターを取得し、戻り値をチェックする必要があります。 OLE アプリケーションでは、QueryInterface が成功すると安全に想定することはできません。
この要件は、すべての OLE アプリケーションに適用されます。 要求されたインターフェイスが使用できない場合 (つまり、QueryInterface は E_NOINTERFACE を返します)、指定されたジョブ関数を実行できないことを意味する場合でも、コントロールまたはコンテナーは正常に低下する必要があります。
関連トピック