Sdílet prostřednictvím


Úprava dědičnosti třídy RMyProviderRowset

Chcete-li přidat rozhraní IRowsetLocate k příkladu jednoduchého zprostředkovatele pouze pro čtení, změňte dědičnost RMyProviderRowset.Původně RMyProviderRowset dědí z CRowsetImpl.Je nutné to změnit, aby dědil z CRowsetBaseImpl.

Chcete-li to provést, vytvořte novou třídu CMyRowsetImpl v 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 > >
{
...
};

Nyní upravte mapu rozhraní modelu COM v MyProviderRS.h takto:

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

Tím se vytvoří mapa rozhraní modelu COM, která informuje CMyRowsetImpl, aby volal QueryInterface pro obě rozhraní IRowset a IRowsetLocate.Chcete-li získat všechny implementace ostatních tříd sady řádků, mapa odkazuje třídu CMyRowsetImpl zpět na třídu CRowsetBaseImpl, která je definovaná pomocí šablon technologie OLE DB; mapa používá makro COM_INTERFACE_ENTRY_CHAIN, které sděluje šablonám technologie OLE DB, aby prohledali mapu modelu COM v CRowsetBaseImpl jako odpověď na volání QueryInterface.

Nakonec propojí RAgentRowset na CMyRowsetBaseImpl tím, že změní RAgentRowset, aby dědil z CMyRowsetImpl takto:

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

RAgentRowset nyní může používat rozhraní IRowsetLocate při využití výhod zbytku implementací pro třídu sady řádků.

Když toto uděláte, můžete dynamicky určovat sloupce, které jsou vráceny příjemci.

Viz také

Referenční dokumentace

Rozšíření jednoduchého zprostředkovatele pouze pro čtení