Modificando a herança de RMyProviderRowset
Para adicionar o IRowsetLocate interface para o exemplo de provedor simples de somente leitura, modificar a herança de RMyProviderRowset.Inicialmente, RMyProviderRowset herda de CRowsetImpl. Você precisa modificá-la para herdar da 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 MAP de interface COM em MyProviderRS.h ser da seguinte maneira:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Isso cria um MAP de interface COM que informa ao CMyRowsetImpl para telefonar QueryInterface a IRowset e IRowsetLocate interfaces. Para obter toda a implementação para as outras classes de conjunto de linhas, o MAP vincula o CMyRowsetImpl classe de volta para o CRowsetBaseImpl classe definida pelos modelos OLE DB; o MAP usa a macro COM_INTERFACE_ENTRY_CHAIN, que diz Modelos OLE DB para examinar o MAP de COM em CRowsetBaseImpl em resposta a um QueryInterface telefonar.
Por fim, vincular RAgentRowset para CMyRowsetBaseImpl modificando RAgentRowset Herdar de CMyRowsetImpl, da seguinte maneira:
class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>
RAgentRowset agora pode usar o IRowsetLocate interface ao mesmo tempo que aproveita o restante da implementação da classe de conjunto de linhas.
Quando isso for concluído, você pode determinar dinamicamente colunas retornadas para o consumidor.