Partilhar via


Modificando a herança de RMyProviderRowset

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

Para fazer 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 de COM em MyProviderRS.h para ser o seguinte:

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 todos os da implementação para outro conjunto de linhas de classes, os links do mapa de CMyRowsetImpl classe de volta para o CRowsetBaseImpl classe definida pelos OLE DB modelos; o mapa usa a macro COM_INTERFACE_ENTRY_CHAIN, que informa ao modelos OLE DB para examinar o mapa de COM em CRowsetBaseImpl em resposta a uma QueryInterface 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 usufruindo o restante da implementação para a classe de conjunto de linhas.

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

Consulte também

Referência

Aprimorando o provedor de somente leitura Simple