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 IRowsetNotify
trouver 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.