Freigeben über


Unterstützen von Benachrichtigungen

Implementieren von Verbindungspunkt-Schnittstellen für Anbieter und Consumer

Damit Benachrichtigungen implementiert werden können, muss eine Anbieterklasse von IRowsetNotifyCP und IConnectionPointContainer erben.

Durch IRowsetNotifyCP wird die Anbietersite für die Verbindungspunkt-Schnittstelle IRowsetNotify implementiert. IRowsetNotifyCP implementiert Übertragungsfunktionen, mit denen Listener am IID_IRowsetNotify-Verbindungspunkt informiert werden, dass der Inhalt des Rowsets geändert wurde.

Beachten Sie, dass zusätzlich IRowsetNotify (wird auch als Senke bezeichnet) mithilfe von IRowsetNotifyImpl für den Consumer implementiert und registriert werden muss, damit Benachrichtigungen vom Consumer behandelt werden können. Informationen zum Implementieren der Verbindungspunkt-Schnittstelle für den Consumer finden Sie unter Empfangen von Benachrichtigungen.

Außerdem muss die Klasse eine Zuordnung enthalten, in der der Verbindungspunkteintrag, wie im Folgenden dargestellt, definiert ist:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Hinzufügen von "IRowsetNotify"

Zum Hinzufügen von IRowsetNotify müssen IConnectionPointContainerImpl<rowset-name> und IRowsetNotifyCP<rowset-name> in die Vererbungskette eingefügt werden.

Als Beispiel sehen Sie hier die Vererbungskette für RUpdateRowset aus UpdatePV:

Hinweis

Der Beispielcode kann von dem hier aufgeführten Code abweichen, sollte jedoch als aktuellere Version angesehen werden.

///////////////////////////////////////////////////////////////////////////
// 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>

Festlegen von Einträgen in der COM-Zuordnung

Der COM-Zuordnung im Rowset müssen außerdem folgende Makros hinzugefügt werden:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Mithilfe dieser Makros kann bei einem QueryInterface-Aufruf für den Verbindungspunktcontainer (die Basis für IRowsetNotify) stets die angeforderte Schnittstelle aus dem Anbieter ermittelt werden. Informationen zur Verwendung von Verbindungspunkten finden Sie im ATL POLYGON-Beispiel und -Lernprogramm.

Festlegen von Einträgen in der Verbindungspunktzuordnung

Sie müssen außerdem eine Verbindungspunktzuordnung hinzufügen, die in etwa mit der folgenden vergleichbar ist:

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

Durch die Verbindungspunktzuordnung kann eine Komponente, die die IRowsetNotify-Schnittstelle sucht, diese Schnittstelle im Anbieter auffinden.

Festlegen von Eigenschaften

Dem Anbieter müssen darüber hinaus die folgenden Eigenschaften hinzugefügt werden. Es müssen nur Eigenschaften auf der Grundlage der unterstützten Schnittstellen hinzugefügt werden.

Eigenschaft

Bei Unterstützung hinzufügen

DBPROP_IConnectionPointContainer

Immer

DBPROP_NOTIFICATIONGRANULARITY

Immer

DBPROP_NOTIFICATIONPHASES

Immer

DBPROP_NOTIFYCOLUMNSET

IRowsetChange

DBPROP_NOTIFYROWDELETE

IRowsetChange

DBPROP_NOTIFYROWINSERT

IRowsetChange

DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE

Immer

DBPROP_NOTIFYROWFIRSTCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWSETRELEASE

Immer

DBPROP_NOTIFYROWUNDOCHANGE

IRowsetUpdate

DBPROP_NOTIFYROWUNDODELETE

IRowsetUpdate

DBPROP_NOTIFYROWUNDOINSERT

IRowsetUpdate

DBPROP_NOTIFYROWUPDATE

IRowsetUpdate

Die meisten Implementierungsfunktionen für Benachrichtigungen sind bereits in die OLE DB-Anbietervorlagen eingebettet. Wenn IRowsetNotifyCP der Vererbungskette nicht hinzugefügt wird, entfernt der Compiler aufgrund eines Compilerfeatures in Visual C++.NET den gesamten Code aus dem Kompilierungsstream, wodurch die Codegröße reduziert wird.

Siehe auch

Konzepte

Erweiterte Anbietertechniken