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.