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ê precisará modificar que herdam de CRowsetBaseImpl. Para fazer isso, criar uma Novo classe, CMyRowsetImpl , em MyProviderRS. H:

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS. H

modelo lt; classe T, classe armazenamento, classe CreatorClass, classe ArrayType = CSimpleArray <Storage> >
Classe CMyRowsetImpl:
   público CRowsetBaseImpl < T, armazenamento, CreatorClass, ArrayType >,
   IRowsetLocateImpl pública <T>
{
   TypeDef CRowsetBaseImpl < T, armazenamento, CreatorClass, ArrayType > _RowsetBaseClass;

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
}

Agora, criar um mapa de interface COM que diz CMyRowsetImpl chamar Falha de QueryInterface para ambos a IRowset e IRowsetLocate interfaces.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS. H

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()

Para obter todos os execução para as outras classes de conjunto de linhas, vincular o CMyRowsetImpl classe Voltar à classe CRowsetBaseImpl definido pelo OLE DB modelos. Para fazer isso, use uma macro COM_INTERFACE_ENTRY_CHAIN , conforme mostrado no código a seguir. A macro COM_INTERFACE_ENTRY_CHAIN diz modelos de OOLE DB para verificar o mapa de COM em CRowsetBaseImpl em resposta a uma chamada de QueryInterface.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS. H

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

Finalmente, link RAgentRowset para CMyRowsetBaseImpl , modificando RAgentRowset para herdar de CMyRowsetImpl , como mostrado aqui:

classe RAgentRowset: CMyRowsetImpllt pública;RAgentRowset, CAgentMan, CMyProviderCommand & gt

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

Quando isso é feito, você está pronto para implementar IRowsetLocateImpl.

Index