Modification de l'héritage de RMyProviderRowset

Pour ajouter le IRowsetLocate d'interface à l'exemple de fournisseur simple en lecture seule, modifiez l'héritage de RMyProviderRowset . Au départ, RMyProviderRowset hérite de CRowsetImpl. Vous devrez modifier pour qu'elle hérite de CRowsetBaseImpl. Pour ce faire, créez une nouvelle classe, CMyRowsetImpl , dans MyProviderRS.h:

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

modèle lt; T, classe de stockage, classe CreatorClass, classe ArrayType = CSimpleArray <Storage> >
classe CMyRowsetImpl :
   public CRowsetBaseImpl < T, stockage, CreatorClass, ArrayType >,
   IRowsetLocateImpl public <T>
{
   TypeDef CRowsetBaseImpl < T, stockage, CreatorClass, ArrayType > _RowsetBaseClass ;

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
}

Maintenant, créez un mappage d'interface COM qui dit CMyRowsetImpl d'appeler QueryInterface pour les deux IRowset et IRowsetLocate interfaces.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()

Pour obtenir toute l'implémentation pour les autres classes de jeu de lignes, de lier la CMyRowsetImpl classe à la classe CRowsetBaseImpl définie par les modèles OLE DB. Pour ce faire, utilisez une macro COM_INTERFACE_ENTRY_CHAIN , comme le montre le code suivant. La macro COM_INTERFACE_ENTRY_CHAIN raconte des modèles OLE DB d'analyser le mappage COM dans CRowsetBaseImpl en réponse à un appel QueryInterface.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

Enfin, un lien RAgentRowset à CMyRowsetBaseImpl en modifiant RAgentRowset hérite de CMyRowsetImpl , comme indiqué ici:

classe RAgentRowset : CMyRowsetImpllt public ;RAgentRowset, CAgentMan, CMyProviderCommand & gt

RAgentRowsetpeuvent désormais utiliser la IRowsetLocate interface tout en profitant du reste de l'implémentation de la classe rowset.

Lorsque cela est fait, vous êtes prêt à mettre en œuvre IRowsetLocateImpl.

Index