通知のサポート

更新 : 2007 年 11 月

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

通知を実装するには、プロバイダ クラスが 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 の継承チェインの例を次に示します。

at4a5k5t.alert_note(ja-jp,VS.90).gifメモ :

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

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

参照

概念

高度なプロバイダ手法