Modification de l'héritage de RMyProviderRowset
Pour ajouter l'interface IRowsetLocate à l'exemple de fournisseur simple accessible en lecture seule, modifiez l'héritage de RMyProviderRowset. Initialement, RMyProviderRowset hérite de CRowsetImpl. Vous devez la modifier pour qu'elle hérite de CRowsetBaseImpl.
Pour ce faire, créez une nouvelle classe, CMyRowsetImpl, dans MyProviderRS.h :
////////////////////////////////////////////////////////////////////////
// MyProviderRS.h
template <class T, class Storage, class CreatorClass, class ArrayType = CAtlArray<Storage> >
class CMyRowsetImpl:
public CRowsetImpl<T, Storage, CreatorClass, ArrayType, CSimpleRow, IRowsetLocateImpl< T, IRowsetLocate > >
{
...
};
À présent, modifiez le mappage de l'interface COM dans MyProviderRS.h de façon à lui donner l'aspect suivant :
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Cette opération crée un mappage d'interface COM qui indique à CMyRowsetImpl d'appeler QueryInterface pour les deux interfaces IRowset et IRowsetLocate. Pour assurer toute l'implémentation pour les autres classes rowset, le mappage lie la classe CMyRowsetImpl à la classe CRowsetBaseImpl définie par les modèles OLE DB ; le mappage utilise la macro COM_INTERFACE_ENTRY_CHAIN, qui indique aux modèles OLE DB d'analyser le mappage COM dans CRowsetBaseImpl en réponse à un appel QueryInterface.
Enfin, liez RAgentRowset à CMyRowsetBaseImpl en modifiant RAgentRowset pour qu'elle hérite de CMyRowsetImpl, comme ceci :
class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>
RAgentRowset peut à présent utiliser l'interface IRowsetLocate tout en tirant parti du reste de l'implémentation pour la classe rowset.
Ensuite, vous pouvez déterminer de manière dynamique les colonnes retournées au consommateur.
Voir aussi
Référence
Amélioration du fournisseur simple accessible en lecture seule