Supporto delle notifiche
Implementazione di interfacce per i punti di connessione su provider e consumer
Per implementare le notifiche, è necessario che la classe del provider erediti da IRowsetNotifyCP e IConnectionPointContainer.
IRowsetNotifyCP implementa il sito del provider per l'interfaccia del punto di connessione IRowsetNotify. IRowsetNotifyCP implementa le funzioni di trasmissione per comunicare ai listener sul punto di connessione IID_IRowsetNotify le modifiche apportate al contenuto del rowset.
Tenere presente che è anche necessario implementare e registrare IRowsetNotify sul consumer tramite IRowsetNotifyImpl in modo che il consumer possa gestire le notifiche. In questo caso,si dice che il consumer funge da sink. Per informazioni sull'implementazione dell'interfaccia del punto di connessione sul consumer, vedere Ricezione di notifiche.
È inoltre necessario che la classe contenga una mappa con la definizione della voce del punto di connessione, come illustrato di seguito:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Aggiunta di IRowsetNotify
Per aggiungere IRowsetNotify, è necessario aggiungere IConnectionPointContainerImpl<rowset-name> e IRowsetNotifyCP<rowset-name> alla catena di ereditarietà.
Di seguito, ad esempio, è riportata la catena di ereditarietà di RUpdateRowset presente in UpdatePV:
Nota
È possibile che il codice di esempio sia diverso e più aggiornato rispetto a quello riportato di seguito.
///////////////////////////////////////////////////////////////////////////
// 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>
Impostazione delle voci della mappa COM
Sarà inoltre necessario aggiungere quanto segue alla mappa COM del rowset:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Queste macro consentono agli oggetti che eseguono chiamate a QueryInterface per cercare il contenitore del punto di connessione, ovvero la base di IRowsetNotify, di trovare l'interfaccia richiesta sul provider. Per un esempio di utilizzo dei punti di connessione, vedere l'esempio e l'esercitazione ATL POLYGON.
Impostazione delle voci della mappa dei punti di connessione
È inoltre necessario aggiungere una mappa dei punti di connessione simile alla seguente:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Questa mappa dei punti di connessione consente a un componente che cerca l'interfaccia IRowsetNotify di trovarla nel provider.
Impostazione delle proprietà
È inoltre necessario aggiungere le seguenti proprietà al provider. Aggiungere solo le proprietà necessarie per le interfacce supportate.
Proprietà |
Interfaccia per la quale è necessario aggiungere la proprietà |
---|---|
DBPROP_IConnectionPointContainer |
Sempre |
DBPROP_NOTIFICATIONGRANULARITY |
Sempre |
DBPROP_NOTIFICATIONPHASES |
Sempre |
DBPROP_NOTIFYCOLUMNSET |
IRowsetChange |
DBPROP_NOTIFYROWDELETE |
IRowsetChange |
DBPROP_NOTIFYROWINSERT |
IRowsetChange |
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE |
Sempre |
DBPROP_NOTIFYROWFIRSTCHANGE |
IRowsetUpdate |
DBPROP_NOTIFYROWSETRELEASE |
Sempre |
DBPROP_NOTIFYROWUNDOCHANGE |
IRowsetUpdate |
DBPROP_NOTIFYROWUNDODELETE |
IRowsetUpdate |
DBPROP_NOTIFYROWUNDOINSERT |
IRowsetUpdate |
DBPROP_NOTIFYROWUPDATE |
IRowsetUpdate |
L'implementazione per le notifiche è in gran parte già incorporata nei modelli provider OLE DB. Grazie a una funzionalità del compilatore di Visual C++ .NET, se non si aggiunge IRowsetNotifyCP alla catena di ereditarietà, tutto questo codice verrà rimosso dal flusso di compilazione, riducendo le dimensioni del codice.