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, CCustomRowsetImpl
dans 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