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.