Compartilhar via


Modificando a herança de RMyProviderRowset

Para adicionar o IRowsetLocate interface para o exemplo de provedor de somente leitura simples, modificar a herança de RMyProviderRowset.Inicialmente, RMyProviderRowset herda de CRowsetImpl.Você precisa modificá-la para herdar de CRowsetBaseImpl.

Para isso, crie uma nova classe, CMyRowsetImpl, em 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 > >
{
...
};

Agora, edite o mapa de interface COM em MyProviderRS.h ser como segue:

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

Isso cria um mapa de interface COM informa CMyRowsetImpl para chamar QueryInterface para ambos os IRowset e IRowsetLocate interfaces.Para obter toda a implementação de outro conjunto de linhas classes, os links do mapa de CMyRowsetImpl classe de volta para o CRowsetBaseImpl classe definido pelo OLE DB modelos; o mapa usa a macro COM_INTERFACE_ENTRY_CHAIN, que diz modelos OLE DB para examinar o mapa de COM em CRowsetBaseImpl em resposta a uma QueryInterface de chamada.

Finalmente, o link RAgentRowset para CMyRowsetBaseImpl modificando RAgentRowset para herdar de CMyRowsetImpl, da seguinte forma:

class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>

RAgentRowsetagora pode usar o IRowsetLocate interface, aproveitando o restante da implementação para a classe de conjunto de linhas.

Quando isso for feito, você pode dinamicamente determinar colunas retornadas para o consumidor.

Consulte também

Referência

Aprimorando o provedor de somente leitura Simple