次の方法で共有


通知のサポート

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

通知を実装するために、プロバイダー クラスは 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 の継承チェーンは次のようになります。

Note

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

///////////////////////////////////////////////////////////////////////////
// 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 を継承チェーンに追加しない場合、コンパイラはそのコードをすべてコンパイル ストリームから削除するため、コードのサイズが小さくなります。

関連項目

高度なプロバイダー手法