次の方法で共有


通知のサポート

プロバイダーとコンシューマーでのコネクション ポイント インターフェイスの実装

通知を実装するには、プロバイダー クラスが IRowsetNotifyCPIConnectionPointContainer を継承する必要があります。

IRowsetNotifyCP は、IRowsetNotifyコネクション ポイント インターフェイスのプロバイダー サイトを実装します。IRowsetNotifyCP はブロードキャスト関数を実装して、コネクション ポイント IID_IRowsetNotify 上のリスナーに対し、行セットの内容変更をアドバイズします。

また、IRowsetNotifyImpl を使用して、シンクとも呼ばれるコンシューマーで IRowsetNotify を実装および登録し、コンシューマーで通知を処理できるようにします。コンシューマー側のコネクション ポイント インターフェイスの実装については、「通知の受信」を参照してください。

また、クラスには、次のようにコネクション ポイント エントリを定義するマップも含める必要があります。

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

IRowsetNotify の追加

IRowsetNotify を追加するには、IConnectionPointContainerImpl<rowset-name> と IRowsetNotifyCP<rowset-name> を継承チェーンに追加する必要があります。

UpdatePV 内の RUpdateRowset の継承チェインの例を次に示します。

[!メモ]

サンプル コードは、ここに記載されているコードと異なる場合がありますが、その場合はサンプル コードの方が最新バージョンであると考えてください。

///////////////////////////////////////////////////////////////////////////
// class RUpdateRowset (in rowset.h)

class RUpdateRowset : 
public CRowsetImpl< RUpdateRowset, CAgentMan, CUpdateCommand, 
         CAtlArray< CAgentMan, CAtlArray<CAgentMan> >, CSimpleRow, 
         IRowsetScrollImpl< RUpdateRowset, IRowsetScroll > >,
      public IRowsetUpdateImpl< RUpdateRowset, CAgentMan >,
      public IConnectionPointContainerImpl<RUpdateRowset>,
      public IRowsetNotifyCP<RUpdateRowset>

at4a5k5t.collapse_all(ja-jp,VS.110).gifCOM マップ エントリの設定

次のエントリを行セットの COM マップに追加する必要もあります。

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

これらのマクロにより、コネクション ポイント コンテナー (IRowsetNotify の実装側) に対する QueryInterface の任意の呼び出し側が、プロバイダー上の要求されたインターフェイスを検索できるようになります。コネクション ポイントの使用例については、ATL POLYGON サンプルとチュートリアルを参照してください。

at4a5k5t.collapse_all(ja-jp,VS.110).gifコネクション ポイント マップのエントリの設定

コネクション ポイント マップも追加する必要があります。たとえば、次のようになります。

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

このコネクション ポイント マップにより、IRowsetNotify インターフェイスを検索するコンポーネントが、プロバイダーでこのインターフェイスを見つけることができるようになります。

at4a5k5t.collapse_all(ja-jp,VS.110).gifプロパティの設定

また、以下のプロパティをプロバイダーに追加する必要もあります。サポートするインターフェイスに基づいたプロパティだけを追加します。

プロパティ

サポートする内容

DBPROP_IConnectionPointContainer

常時

DBPROP_NOTIFICATIONGRANULARITY

常時

DBPROP_NOTIFICATIONPHASES

常時

DBPROP_NOTIFYCOLUMNSET

IRowsetChange

DBPROP_NOTIFYROWDELETE

IRowsetChange

DBPROP_NOTIFYROWINSERT

IRowsetChange

DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE

常時

DBPROP_NOTIFYROWFIRSTCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWSETRELEASE

常時

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUNDODELETE

IRowsetUpdate

DBPROP_NOTIFYROWUNDOINSERT

IRowsetUpdate

DBPROP_NOTIFYROWUPDATE

IRowsetUpdate

通知の実装の大部分は、OLE DB プロバイダー テンプレートに埋め込まれています。IRowsetNotifyCP を継承チェーンに追加しない場合は、Visual C++ .NET のコンパイラ機能により、コンパイルのストリームからそのコードがすべて削除されるため、コード サイズが小さくなります。

参照

概念

高度なプロバイダー手法