Partager via


Prise en charge des notifications

Implémentation d’interfaces de point de connexion sur le fournisseur et le consommateur

Pour implémenter des notifications, une classe de fournisseur doit hériter de IRowsetNotifyCP et IConnectionPointContainer.

IRowsetNotifyCP implémente le site fournisseur pour l’interface de point de connexion IRowsetNotify. IRowsetNotifyCP implémente des fonctions de diffusion pour conseiller les écouteurs sur le point IID_IRowsetNotify de connexion des modifications apportées au contenu de l’ensemble de lignes.

Vous devez également implémenter et inscrire IRowsetNotify sur le consommateur (également appelé récepteur) à l’aide de IRowsetNotifyImpl afin que le consommateur puisse gérer les notifications. Pour plus d’informations sur l’implémentation de l’interface de point de connexion sur le consommateur, consultez Réception de notifications.

En outre, la classe doit avoir une carte qui définit l’entrée de point de connexion, comme suit :

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Ajout d’IRowsetNotify

Pour ajouter IRowsetNotify, vous devez ajouter IConnectionPointContainerImpl<rowset-name> et IRowsetNotifyCP<rowset-name> à votre chaîne d’héritage.

Par exemple, voici la chaîne d’héritage pour RUpdateRowset UpdatePV :

Remarque

L’exemple de code peut différer de ce qui est répertorié ici. Considérez cet exemple de code comme la version la plus récente.

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

Définition des entrées de mappage COM

Vous devez également ajouter les éléments suivants à la carte COM dans votre ensemble de lignes :

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Ces macros permettent à toute personne appelant QueryInterface votre conteneur de points de connexion (la base de ) de IRowsetNotifytrouver l’interface demandée sur votre fournisseur. Pour obtenir un exemple d’utilisation des points de connexion, consultez l’exemple et le didacticiel ATL POLYGON.

Définition des entrées de mappage de point de connexion

Vous devez également ajouter une carte de points de connexion. Il devrait ressembler à ceci :

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

Ce mappage de points de connexion permet à un composant à la recherche de l’interface IRowsetNotify dans votre fournisseur.

Définition de propriétés

Vous devez également ajouter les propriétés suivantes à votre fournisseur. Vous devez uniquement ajouter des propriétés basées sur les interfaces que vous prenez en charge.

Propriété Ajouter si vous prenez en charge
DBPROP_IConnectionPointContainer Toujours
DBPROP_NOTIFICATIONGRANULARITY Toujours
DBPROP_NOTIFICATIONPHASES Toujours
DBPROP_NOTIFYCOLUMNSET IRowsetChange
DBPROP_NOTIFYROWDELETE IRowsetChange
DBPROP_NOTIFYROWINSERT IRowsetChange
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE Toujours
DBPROP_NOTIFYROWFIRSTCHANGE IRowsetUpdate
DBPROP_NOTIFYROWSETRELEASE Toujours
DBPROP_NOTIFYROWUNDOCHANGE IRowsetUpdate
DBPROP_NOTIFYROWUNDODELETE IRowsetUpdate
DBPROP_NOTIFYROWUNDOINSERT IRowsetUpdate
DBPROP_NOTIFYROWUPDATE IRowsetUpdate

La plupart de l’implémentation des notifications est déjà incorporée dans les modèles de fournisseur OLE DB. Si vous n’ajoutez IRowsetNotifyCP pas à votre chaîne d’héritage, le compilateur supprime tout ce code de votre flux de compilation, ce qui réduit la taille de votre code.

Voir aussi

Techniques avancées du fournisseur