Supporto delle notifiche
Implementazione delle interfacce del punto di connessione nel provider e nel consumer
Per implementare le notifiche, una classe provider deve ereditare da IRowsetNotifyCP e IConnectionPointContainer.
IRowsetNotifyCP
implementa il sito del provider per l'interfaccia del punto di connessione IRowsetNotify. IRowsetNotifyCP
implementa funzioni di trasmissione per consigliare i listener sul punto IID_IRowsetNotify
di connessione delle modifiche al contenuto del set di righe.
È inoltre necessario implementare e registrare IRowsetNotify
nel consumer (noto anche come sink) usando IRowsetNotifyImpl in modo che il consumer possa gestire le notifiche. Per informazioni sull'implementazione dell'interfaccia del punto di connessione nel consumer, vedere Ricezione di notifiche.
Inoltre, la classe deve avere una mappa che definisce la 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à.
Ad esempio, ecco la catena di ereditarietà per RUpdateRowset
in UpdatePV:
Nota
Il codice di esempio può essere diverso da quello riportato di seguito. Considerare il codice di esempio come la versione più aggiornata.
///////////////////////////////////////////////////////////////////////////
// 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
È anche necessario aggiungere quanto segue alla mappa COM nel set di righe:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Queste macro consentono a chiunque di chiamare QueryInterface
per il contenitore del punto di connessione (la base di IRowsetNotify
) di trovare l'interfaccia richiesta nel provider. Per un esempio di come usare i punti di connessione, vedere l'esempio e l'esercitazione ATL POLYGON.
Impostazione delle voci della mappa dei punti di connessione
È anche necessario aggiungere una mappa punto di connessione. Dovrebbe essere simile a:
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 di cercare l'interfaccia IRowsetNotify
per trovarla nel provider.
Impostazione delle proprietà
È anche necessario aggiungere le proprietà seguenti al provider. È sufficiente aggiungere proprietà in base alle interfacce supportate.
Proprietà | Aggiungere se si supporta |
---|---|
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 |
La maggior parte dell'implementazione per le notifiche è già incorporata nei modelli di provider OLE DB. Se non si aggiunge IRowsetNotifyCP
alla catena di ereditarietà, il compilatore rimuove tutto il codice dal flusso di compilazione, rendendo così più piccola la dimensione del codice.