Condividi tramite


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.

Vedi anche

Tecniche avanzate del provider