Partager via


Modification de l’héritage de RCustomRowset

Pour ajouter l’interface à l’exemple IRowsetLocate de fournisseur en lecture seule simple, modifiez l’héritage de CCustomRowset. Initialement, CCustomRowset hérite de CRowsetImpl. Vous devez le modifier pour hériter de CRowsetBaseImpl.

Pour ce faire, créez une classe, CCustomRowsetImpldans CustomRS.h :

////////////////////////////////////////////////////////////////////////
// CustomRS.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 la carte d’interface COM dans CustomRS.h comme suit :

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY(IRowsetLocate)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

Ce code crée un mappage d’interface COM qui indique CMyRowsetImpl d’appeler QueryInterface à la fois les interfaces et IRowsetLocate les IRowset interfaces. Pour obtenir l’implémentation de toutes les autres classes d’ensemble de lignes, la carte renvoie la CMyRowsetImpl classe à la CRowsetBaseImpl classe définie par les modèles OLE DB ; la carte utilise la macro COM_INTERFACE_ENTRY_CHAIN, ce qui indique aux modèles OLE DB d’analyser la carte COM en CRowsetBaseImpl réponse à un QueryInterface appel.

Enfin, liez-y CCustomRowset CMyRowsetBaseImpl en modifiant CCustomRowset pour hériter CMyRowsetImpl, comme suit :

class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>

CCustomRowset peut désormais utiliser l’interface IRowsetLocate tout en tirant parti du reste de l’implémentation pour la classe d’ensemble de lignes.

Une fois cette opération effectuée, vous pouvez déterminer dynamiquement les colonnes retournées au consommateur.

Voir aussi

Amélioration du fournisseur simple accessible en lecture seule