Compartilhar via


Modificar a herança de RCustomRowset

Para adicionar a interface IRowsetLocate ao exemplo simples de provedor somente leitura, modifique a herança de CCustomRowset. Inicialmente, CCustomRowset herda de CRowsetImpl. Você precisa modificá-lo para herdar de CRowsetBaseImpl.

Para fazer isso, crie uma nova classe, CCustomRowsetImpl, no RS.h personalizado:

////////////////////////////////////////////////////////////////////////
// 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 >>
{
...
};

Agora, edite o mapa da interface COM no RS.h personalizado para que fique da seguinte maneira:

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

Esse código cria um mapa de interface COM que informa a CMyRowsetImpl para chamar QueryInterface para as interfaces IRowset e IRowsetLocate. Para obter toda a implementação das outras classes de conjunto de linhas, o mapa vincula a classe CMyRowsetImpl de volta à classe CRowsetBaseImpl definida pelos modelos OLE DB; o mapa usa a macro COM_INTERFACE_ENTRY_CHAIN, que instrui os modelos OLE DB para examinar o mapa COM em CRowsetBaseImpl em resposta a uma chamada QueryInterface.

Por fim, vincule CCustomRowset a CMyRowsetBaseImpl modificando CCustomRowset para herdar de CMyRowsetImpl, da seguinte maneira:

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

CCustomRowset agora pode usar a interface IRowsetLocate enquanto aproveita o restante da implementação para a classe de conjunto de linhas.

Quando isso estiver concluído, você poderá determinar dinamicamente as colunas retornadas ao consumidor.

Confira também

Aprimorando o provedor somente leitura simples