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.