Prise en charge des notifications
Implémentation des interfaces des points de connexion sur le fournisseur et le consommateur
Pour implémenter des notifications, une classe de fournisseur doit hériter de IRowsetNotifyCP et de IConnectionPointContainer.
IRowsetNotifyCP implémente le site de fournisseur pour l'interface de point de connexion IRowsetNotify. IRowsetNotifyCP implémente des fonctions de diffusion pour informer les écouteurs sur le point de connexion IID_IRowsetNotify des modifications apportées au contenu de l'ensemble de lignes.
Notez que vous devez également implémenter et inscrire IRowsetNotify sur le consommateur (appelé également récepteur) en utilisant IRowsetNotifyImpl de façon 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 des notifications.
En outre, la classe doit également contenir un mappage qui définit l'entrée du point de connexion, comme ceci :
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Ajout de 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 dans UpdatePV :
Notes
Si l'exemple de code et le texte répertorié dans les rubriques suivantes diffèrent, c'est l'exemple de code qui doit être considéré comme étant 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 du mappage COM
Vous devez également ajouter le texte suivant au mappage COM dans votre jeu de lignes :
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Ces macros permettent à ceux qui appellent QueryInterface pour votre conteneur de point de connexion (la base de IRowsetNotify) de trouver l'interface demandée sur votre fournisseur. Pour obtenir un exemple du mode d'utilisation des points de connexion, consultez l'exemple ATL POLYGON et le didacticiel qui s'y rapporte.
Définition des entrées de mappage des points de connexion
Vous devez également ajouter une table des points de connexion. Elle doit ressembler à ceci :
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Cette table des points de connexion permet à un composant recherchant l'interface IRowsetNotify de la trouver dans votre fournisseur.
Définition de propriétés
Vous devez aussi ajouter les propriétés suivantes à votre fournisseur. Seules les propriétés basées sur les interfaces que vous prenez en charge doivent être ajoutées.
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 |
L'essentiel de l'implémentation des notifications est déjà incorporé dans les modèles du fournisseur OLE DB. Compte tenu d'une fonctionnalité du compilateur dans Visual C++ .NET, si vous n'ajoutez pas IRowsetNotifyCP à votre chaîne d'héritage, le compilateur supprime tout ce code de votre flux de compilation, réduisant ainsi la taille du code.