インターフェイスのサポートの意味
IUnknown インターフェイスに加えて、その ActiveX コントロールまたは COM オブジェクトは、追加のインターフェイスを介してサポートする任意の機能を表します。 これは、 IUnknown の上 に他のインターフェイスは必要ないと言うことです。 そのために、次の表に、ActiveX コントロールがサポートする可能性があるインターフェイスと、そのインターフェイスをサポートする意味を示します。
インターフェイス | コメント/インターフェイスをサポートする意味 |
---|---|
IOleObject |
イベント以外のイベントに対してコントロールのクライアント サイトとの通信が必要な場合は (IConnectionPointContainerを参照)、 IOleObject が必要です。 このインターフェイスを実装する場合、コントロールは、 SetHostNames、 Close、 EnumVerbs、 Update、 IsUpToDate、 GetUserClassID、 GetUserType、 GetMiscStatus、および Advise、 Unadvise、および メソッドのセマンティクスもサポートする必要があります。コンテナーの IAdviseSink 実装と組み合わせて動作する EnumAdvise メソッド。 コンテナーが IAdviseSink を提供する場合、 IOleObject を実装するコントロールは IAdviseSink を処理できる必要があります。その場合、コンテナーでは、存在しないシンクを呼び出そうとしないことをコントロールが保証することはできません。 |
IOleInPlaceObject |
インプレースアクティブ化され、場合によっては UI がアクティブ化されるコントロールの機能を表します。 このインターフェイスは、コントロールにアクティブ化できる何らかの種類のユーザー インターフェイスがあり、 IOleInPlaceActiveObject もサポートされていることを意味します。 必要なメソッドは、 GetWindow、 InPlaceDeactivate、 UIDeactivate、 SetObjectRects、および ReactivateAndUndoです。 このインターフェイスのサポートには、 IOleObject のサポートが必要です。 |
IOleInPlaceActiveObject |
IOleInPlaceObject をサポートするインプレース対応オブジェクトも、このインターフェイスを提供する必要がありますが、コントロール自体がインターフェイスを直接実装するとは限りません。 |
IOleControl |
(a) ニーモニック (GetControlInfo、 OnMnemonic メソッド)、(b) アンビエント プロパティ (OnAmbientPropertyChange)、および(c) コントロールがコンテナーを処理するために必要なイベント (FreezeEvents) を処理するコントロールの能力と欲求を表します。 ニーモニックは、 IOleInPlaceActiveObject で処理されるアクセラレータとは異なります。ニーモニックには UI が関連付けられているので、コントロールが UI アクティブでない場合でもアクティブになります。 ニーモニックに対するコントロールのサポートは、コントロールがコンテナーの IOleControlSite::OnControlInfoChanged メソッドの使用方法も認識していることを意味します。 この場合、コントロールはコンテナーのサイトを認識する必要があるため、ニーモニックのサポートは IOleObject の サポートも意味します。 さらに、ニーモニックに関する知識にはインプレース サポートが必要であるため、 IOleInPlaceObject も必要です。 コントロールでコンテナーアンビエント プロパティを使用する場合は、変更のセマンティクスに従う必要があるため、変更通知を受け取るためにこのインターフェイスも実装する必要があります。 アンビエント プロパティはコンテナー サイトの IDispatch 経由でのみ使用できるため、アンビエント プロパティのサポートは、コントロールが IOleObject をサポートし (サイトを取得するため)、 IDispatch::Invoke 呼び出しを生成できることを意味します。 FreezeEvents メソッドは、コンテナーがイベントを処理しないタイミングを知る必要があるコントロールに必要です。これが、コントロールがこの条件を認識するための唯一の方法です。 他の IOleControl メソッドが実装されないように、 FreezeEvents が単独で必要な場合、 IOleControl は IOleObject または IOleInPlaceObject なしでスタンドアロンにすることができます。 |
IDataObject |
コントロールに提供するプロパティがある場合、コントロールが少なくとも (a) コントロールのグラフィカル レンダリングを提供できることを示します (コントロールにビジュアルがまったく含まれている場合は、CF_METAFILEPICTは最小)。 GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvise, および EnumDAdvise のメソッドが必要です。 CF_METAFILEPICT以外のグラフィカル形式のサポートは省略可能です。 |
IViewObject2 |
コントロールがインプレースアクティブでない場合に、いくつかの興味深いビジュアルがあることを示します。 実装されている場合、コントロールは Draw、 GetAdvise、 SetAdvise、 および GetExtent のメソッドをサポートする必要があります。 |
IDispatch |
コントロールに、(a) カスタム メソッド、または (b) IDispatch::Invoke による遅延バインディング を使用して両方とも使用できるカスタム プロパティがあることを示します。 これには、コントロールが他の IDispatch メソッドを介して型情報を提供する必要もあります。 コントロールは複数の IDispatch 実装をサポートする場合があり、1 つだけが関連付けられているIID_IDispatch、他のコントロールは独自の一意のディスパッチインターフェイス識別子を持つ必要があります。 コントロールは、カスタム メソッドとプロパティ アクセス用のデュアル インターフェイスを提供することをお勧めしますが、メソッドとプロパティが存在する場合は省略可能です。 |
IConnectionPointContainer |
イベントやプロパティ変更通知など、コントロールが少なくとも 1 つの送信インターフェイスをサポートすることを示します。 このインターフェイスが使用可能な場合は、 IEnumConnectionPointsを持つ別のオブジェクトを必要とする EnumConnectionPoints を含む、このインターフェイスのすべてのメソッドを実装する必要があります。 IConnectionPointContainer のサポートは、そのオブジェクトが IConnectionPointContainer メソッドを通して利用可能な IConnectionPoint を持つ1つ以上の関連オブジェクトもサポートしていることを意味します。 各接続ポイント オブジェクト自体は、 EnumConnections を含む完全な IConnectionPoint インターフェイスを実装する必要があります。これには、 IEnumConnections インターフェイスを持つ別の列挙子オブジェクトが必要です。 |
IProvideClassInfo IProvideClassInfo2 |
オブジェクトが IProvideClassInfo::GetClassInfo を介して 直接、独自のコクラス型情報を提供できることを示します。 コントロールが後のバリエーション IProvideClassInfo2 をサポートしている場合は、 IProvideClassInfo2::GetGUID を介してプライマリ ソース IID を提供する機能も示します。 このインターフェイスのすべてのメソッドを実装する必要があります。 |
ISpecifyPropertyPages |
複数コントロールの選択に対してプロパティ ページを表示する場合に、コンテナーがこのコントロールのプロパティ ページを他のコントロールのページと調整できるように、コントロールに表示できるプロパティ ページがあることを示します。 サポートが存在する場合は、このインターフェイスのすべてのメソッドを実装する必要があります。 |
IPerPropertyBrowsing |
(a) プロパティの表示文字列を提供するコントロールの機能を示します。(b) プロパティの定義済みの文字列と値を提供するか、(c) プロパティ dispID を特定のプロパティ ページにマップします。 このインターフェイスのサポートは、上記のように IDispatch を介したプロパティのサポートが提供されることを意味します。 (c) がサポートされている場合は、 IPerPropertyBrowsing::MapPropertyToPage を通じてマップされたオブジェクトのプロパティ ページ自体が 基本的な IPropertyPage インターフェイスとは対照的に、 IPropertyPage2 を実装していることも意味します。 |
IPersistStream IPersistStreamInit IPersistMemory IPersistStorage IPersistMoniker IPersistPropertyBag |
「永続化インターフェイス」を参照してください。 |
IOleCache IOleCache2 |
コントロール ビジュアルのコンテナー キャッシュのサポートを示します。 通常、コントロールは OLE 関数 CreateDataCache を使用してキャッシュ サポート自体を取得します。 意味のある静的コンテンツを持つコントロールのみがこれを行うことを選択する必要があります (必須ではありません)。 コントロールでキャッシュがまったくサポートされていない場合は、単にデータ キャッシュを集計し、データ キャッシュから IOleCache インターフェイスと IOleCache2 インターフェイスの両方を公開する必要があります。 コンテナーが IAdviseSink を提供する場合、 IOleObject を実装するコントロールは IAdviseSink を処理できる必要があります。その場合、コンテナーでは、存在しないシンクを呼び出そうとしないことをコントロールが保証することはできません。 |
IExternalConnection |
コントロールがそれ自体への外部リンクをサポートしていることを示します。つまり、コントロールは OLEMISC_CANTLINKINSIDE でマークされず、 IOleObject::SetMoniker と IOleObject::GetMoniker をサポートします。 OLE のリモート処理レイヤー内から呼び出しが生成されるため、コンテナーはこのインターフェイス自体に対してクエリを実行したり、直接呼び出したりすることはありません。 |
IRunnableObject |
一部のインプロセス オブジェクトと同様に、コントロールが読み込み中と実行中を区別することを示します。 |