Compartir a través de


Modificar la herencia de RMyProviderRowset

Para agregar la interfaz IRowsetLocate al ejemplo de proveedor sencillo de sólo lectura, modifique la herencia de RMyProviderRowset. Inicialmente, RMyProviderRowset hereda de CRowsetImpl. Debe modificarla para que herede de CRowsetBaseImpl.

Para ello, cree una clase nueva, CMyRowsetImpl, en 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 > >
{
...
};

Ahora, edite el mapa de la interfaz COM de MyProviderRS.h para convertirlo en el siguiente:

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

De esta forma, se crea un mapa de interfaz COM que indica a CMyRowsetImpl que debe llamar a QueryInterface para las interfaces IRowset e IRowsetLocate. Para lograr la implementación completa de las clases de conjunto de filas, el mapa vincula la clase CMyRowsetImpl con la clase CRowsetBaseImpl definida por las Plantillas OLE DB; el mapa utiliza la macro COM_INTERFACE_ENTRY_CHAIN, que indica a las plantillas OLE DB que deben analizar el mapa COM en CRowsetBaseImpl como respuesta a una llamada de QueryInterface.

Por último, vincule RAgentRowset a CMyRowsetBaseImpl modificando RAgentRowset de forma que herede de CMyRowsetImpl, de la manera siguiente:

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

RAgentRowset puede utilizar ahora la interfaz IRowsetLocate a la vez que aprovecha el resto de la implementación de la clase de conjunto de filas.

Cuando haya hecho esto, puede determinar dinámicamente las columnas que se devuelven al consumidor.

Vea también

Referencia

Mejorar un proveedor sencillo de sólo lectura