Compartir vía


Admitir notificaciones

Implementación de interfaces de punto de conexión en el proveedor y el consumidor

Para implementar notificaciones, una clase de proveedor debe heredar de IRowsetNotifyCP e IConnectionPointContainer.

IRowsetNotifyCP implementa el sitio del proveedor para la interfaz de punto de conexión IRowsetNotify. IRowsetNotifyCP implementa funciones de difusión para avisar a las escuchas en el punto de conexión IID_IRowsetNotify de cambios en el contenido del conjunto de filas.

También debe implementar y registrar IRowsetNotify en el consumidor (también conocido como receptor) mediante IRowsetNotifyImpl para que el consumidor pueda controlar las notificaciones. Para obtener información sobre cómo implementar la interfaz de punto de conexión en el consumidor, consulte Recepción de notificaciones.

Además, la clase debe tener una asignación que defina la entrada del punto de conexión, de la siguiente manera:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Adición de IRowsetNotify

Para agregar IRowsetNotify, debe agregar IConnectionPointContainerImpl<rowset-name> y IRowsetNotifyCP<rowset-name> a la cadena de herencia.

Por ejemplo, esta es la cadena de herencia de RUpdateRowset en UpdatePV:

Nota:

El código de ejemplo puede diferir de lo que se muestra aquí; se debe considerar como la versión más actualizada.

///////////////////////////////////////////////////////////////////////////
// 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>

Establecimiento de entradas de asignación COM

También debe agregar lo siguiente a la asignación COM en el conjunto de filas:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Estas macros permiten que cualquiera que llame a QueryInterface para su contenedor de puntos de conexión (la base de IRowsetNotify) encuentre la interfaz solicitada en su proveedor. Para obtener un ejemplo de cómo usar puntos de conexión, consulte el ejemplo y el tutorial de POLYGON de ATL.

Establecimiento de entradas de asignación de punto de conexión

También debe agregar una asignación de punto de conexión. Debe tener un aspecto similar al siguiente:

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

Esta asignación de puntos de conexión permite que un componente busque la interfaz IRowsetNotify para encontrarlo en el proveedor.

Establecer propiedades

También debe agregar las siguientes propiedades a su proveedor. Solo tiene que agregar propiedades basadas en las interfaces que admite.

Propiedad Agregar si admite
DBPROP_IConnectionPointContainer Siempre
DBPROP_NOTIFICATIONGRANULARITY Siempre
DBPROP_NOTIFICATIONPHASES Siempre
DBPROP_NOTIFYCOLUMNSET IRowsetChange
DBPROP_NOTIFYROWDELETE IRowsetChange
DBPROP_NOTIFYROWINSERT IRowsetChange
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE Siempre
DBPROP_NOTIFYROWFIRSTCHANGE IRowsetUpdate
DBPROP_NOTIFYROWSETRELEASE Siempre
DBPROP_NOTIFYROWUNDOCHANGE IRowsetUpdate
DBPROP_NOTIFYROWUNDODELETE IRowsetUpdate
DBPROP_NOTIFYROWUNDOINSERT IRowsetUpdate
DBPROP_NOTIFYROWUPDATE IRowsetUpdate

La mayor parte de la implementación de las notificaciones ya está integrada en las plantillas de proveedores de OLE DB. Si no agrega IRowsetNotifyCP a la cadena de herencia, el compilador quita todo ese código de la secuencia de compilación, lo que reduce el tamaño del código.

Consulte también

Técnicas avanzadas para proveedores