Unterstützen von Benachrichtigungen
Implementieren von Verbindungspunktschnittstellen für Anbieter und Consumer
Um Benachrichtigungen zu implementieren, muss eine Anbieterklasse von IRowsetNotifyCP und IConnectionPointContainer erben.
IRowsetNotifyCP
implementiert die Anbieterwebsite für die Verbindungspunktschnittstelle IRowsetNotify. IRowsetNotifyCP
implementiert Übertragungsfunktionen, um Listener über den Verbindungspunkt IID_IRowsetNotify
von Änderungen am Inhalt des Rowsets zu beraten.
Sie müssen den Verbraucher (auch als Sink bezeichnet) auch mithilfe von IRowsetNotifyImpl implementieren und registrierenIRowsetNotify
, damit der Verbraucher Benachrichtigungen verarbeiten kann. Informationen zum Implementieren der Verbindungspunktschnittstelle für den Consumer finden Sie unter Empfangen von Benachrichtigungen.
Außerdem muss die Klasse über eine Karte verfügen, die den Einstieg des Verbindungspunkts definiert, wie folgt:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Hinzufügen von IRowsetNotify
Zum Hinzufügen IRowsetNotify
müssen Sie Ihrer Vererbungskette hinzufügen und IRowsetNotifyCP<rowset-name>
diese hinzufügenIConnectionPointContainerImpl<rowset-name>
.
Hier ist beispielsweise die Vererbungskette für RUpdateRowset
UpdatePV:
Hinweis
Der Beispielcode unterscheidet sich möglicherweise vom hier gezeigten Code. Betrachten Sie den Beispielcode als die aktuellere Codeversion.
///////////////////////////////////////////////////////////////////////////
// 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 COM-Zuordnungseinträgen
Außerdem müssen Sie der COM-Zuordnung in Ihrem Rowset Folgendes hinzufügen:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Diese Makros ermöglichen es jedem, der ihren Verbindungspunktcontainer aufruft QueryInterface
(die Basis von IRowsetNotify
) die angeforderte Schnittstelle auf Ihrem Anbieter zu finden. Ein Beispiel für die Verwendung von Verbindungspunkten finden Sie im ATL POLYGON-Beispiel und -Lernprogramm.
Festlegen von Verbindungspunktzuordnungseinträgen
Außerdem müssen Sie eine Verbindungspunktzuordnung hinzufügen. Dieser sollte ungefähr wie folgt aussehen:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Diese Verbindungspunktzuordnung ermöglicht einer Komponente, die nach der IRowsetNotify
Schnittstelle sucht, um sie in Ihrem Anbieter zu finden.
Festlegen von Eigenschaften
Außerdem müssen Sie ihrem Anbieter die folgenden Eigenschaften hinzufügen. Sie müssen nur Eigenschaften basierend auf den von Ihnen unterstützten Schnittstellen hinzufügen.
Eigenschaft | Hinzufügen, wenn Sie Unterstützung haben |
---|---|
DBPROP_IConnectionPointContainer | Always |
DBPROP_NOTIFICATIONGRANULARITY | Always |
DBPROP_NOTIFICATIONPHASES | Always |
DBPROP_NOTIFYCOLUMNSET | IRowsetChange |
DBPROP_NOTIFYROWDELETE | IRowsetChange |
DBPROP_NOTIFYROWINSERT | IRowsetChange |
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE | Always |
DBPROP_NOTIFYROWFIRSTCHANGE | IRowsetUpdate |
DBPROP_NOTIFYROWSETRELEASE | Always |
DBPROP_NOTIFYROWUNDOCHANGE | IRowsetUpdate |
DBPROP_NOTIFYROWUNDODELETE | IRowsetUpdate |
DBPROP_NOTIFYROWUNDOINSERT | IRowsetUpdate |
DBPROP_NOTIFYROWUPDATE | IRowsetUpdate |
Die meisten Implementierungen für die Benachrichtigungen sind bereits in die OLE DB-Anbietervorlagen eingebettet. Wenn Sie Ihrer Vererbungskette nicht hinzufügen IRowsetNotifyCP
, entfernt der Compiler den gesamten Code aus dem Kompilierungsstream, wodurch die Codegröße kleiner wird.