Condividi tramite


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.

Vedere anche

Concetti

Tecniche avanzate del provider