次の方法で共有


通知のサポート

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

通知を実装するには、プロバイダー クラスが 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>

COM マップ エントリの設定

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

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

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

コネクション ポイント マップのエントリの設定

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

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

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

プロパティの設定

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

プロパティ

サポートする内容

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 のコンパイラ機能により、コンパイルのストリームからそのコードがすべて削除されるため、コード サイズが小さくなります。

参照

概念

高度なプロバイダー手法