次の方法で共有


インターフェイスのサポートの意味

IUnknown インターフェイスに加えて、その ActiveX コントロールまたは COM オブジェクトは、追加のインターフェイスを介してサポートする任意の機能を表します。 これは、 IUnknown の上 に他のインターフェイスは必要ないと言うことです。 そのために、次の表に、ActiveX コントロールがサポートする可能性があるインターフェイスと、そのインターフェイスをサポートする意味を示します。

インターフェイス コメント/インターフェイスをサポートする意味
IOleObject
イベント以外のイベントに対してコントロールのクライアント サイトとの通信が必要な場合は (IConnectionPointContainerを参照)、 IOleObject が必要です。 このインターフェイスを実装する場合、コントロールは、 SetHostNamesCloseEnumVerbsUpdateIsUpToDateGetUserClassIDGetUserTypeGetMiscStatus、および AdviseUnadvise、および メソッドのセマンティクスもサポートする必要があります。コンテナーの IAdviseSink 実装と組み合わせて動作する EnumAdvise メソッド。 コンテナーが IAdviseSink を提供する場合、 IOleObject を実装するコントロールは IAdviseSink を処理できる必要があります。その場合、コンテナーでは、存在しないシンクを呼び出そうとしないことをコントロールが保証することはできません。
IOleInPlaceObject
インプレースアクティブ化され、場合によっては UI がアクティブ化されるコントロールの機能を表します。 このインターフェイスは、コントロールにアクティブ化できる何らかの種類のユーザー インターフェイスがあり、 IOleInPlaceActiveObject もサポートされていることを意味します。 必要なメソッドは、 GetWindowInPlaceDeactivateUIDeactivateSetObjectRects、および ReactivateAndUndoです。 このインターフェイスのサポートには、 IOleObject のサポートが必要です。
IOleInPlaceActiveObject
IOleInPlaceObject をサポートするインプレース対応オブジェクトも、このインターフェイスを提供する必要がありますが、コントロール自体がインターフェイスを直接実装するとは限りません。
IOleControl
(a) ニーモニック (GetControlInfoOnMnemonic メソッド)、(b) アンビエント プロパティ (OnAmbientPropertyChange)、および(c) コントロールがコンテナーを処理するために必要なイベント (FreezeEvents) を処理するコントロールの能力と欲求を表します。 ニーモニックは、 IOleInPlaceActiveObject で処理されるアクセラレータとは異なります。ニーモニックには UI が関連付けられているので、コントロールが UI アクティブでない場合でもアクティブになります。 ニーモニックに対するコントロールのサポートは、コントロールがコンテナーの IOleControlSite::OnControlInfoChanged メソッドの使用方法も認識していることを意味します。 この場合、コントロールはコンテナーのサイトを認識する必要があるため、ニーモニックのサポートは IOleObject の サポートも意味します。 さらに、ニーモニックに関する知識にはインプレース サポートが必要であるため、 IOleInPlaceObject も必要です。
コントロールでコンテナーアンビエント プロパティを使用する場合は、変更のセマンティクスに従う必要があるため、変更通知を受け取るためにこのインターフェイスも実装する必要があります。 アンビエント プロパティはコンテナー サイトの IDispatch 経由でのみ使用できるため、アンビエント プロパティのサポートは、コントロールが IOleObject をサポートし (サイトを取得するため)、 IDispatch::Invoke 呼び出しを生成できることを意味します。
FreezeEvents メソッドは、コンテナーがイベントを処理しないタイミングを知る必要があるコントロールに必要です。これが、コントロールがこの条件を認識するための唯一の方法です。 他の IOleControl メソッドが実装されないように、 FreezeEvents が単独で必要な場合、 IOleControlIOleObject または IOleInPlaceObject なしでスタンドアロンにすることができます。
IDataObject
コントロールに提供するプロパティがある場合、コントロールが少なくとも (a) コントロールのグラフィカル レンダリングを提供できることを示します (コントロールにビジュアルがまったく含まれている場合は、CF_METAFILEPICTは最小)。 GetData, QueryGetData, EnumFormatEtc, DAdvise, DUnadvise, および EnumDAdvise のメソッドが必要です。 CF_METAFILEPICT以外のグラフィカル形式のサポートは省略可能です。
IViewObject2
コントロールがインプレースアクティブでない場合に、いくつかの興味深いビジュアルがあることを示します。 実装されている場合、コントロールは DrawGetAdviseSetAdvise、 および 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::SetMonikerIOleObject::GetMoniker をサポートします。 OLE のリモート処理レイヤー内から呼び出しが生成されるため、コンテナーはこのインターフェイス自体に対してクエリを実行したり、直接呼び出したりすることはありません。
IRunnableObject
一部のインプロセス オブジェクトと同様に、コントロールが読み込み中と実行中を区別することを示します。

コントロール