Úprava dědičnosti třídy RCustomRowset
Chcete-li přidat IRowsetLocate
rozhraní do jednoduchého příkladu zprostředkovatele jen pro čtení, upravte dědičnost CCustomRowset
. Zpočátku dědí CCustomRowset
z CRowsetImpl
. Musíte ho upravit tak, aby dědil z CRowsetBaseImpl
.
Chcete-li to provést, vytvořte novou třídu , CCustomRowsetImpl
v custom RS.h:
////////////////////////////////////////////////////////////////////////
// CustomRS.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 ve vlastnímRS.h následujícím způsobem:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Tento kód vytvoří mapu rozhraní MODELU COM, která říká CMyRowsetImpl
volání QueryInterface
pro IRowset
rozhraní i IRowsetLocate
rozhraní. K získání všech implementací pro ostatní třídy sady řádků map propojí CMyRowsetImpl
třídu zpět na CRowsetBaseImpl
třídu definovanou šablonami OLE DB; mapa používá makro COM_INTERFACE_ENTRY_CHAIN, které říká šablonám OLE DB, aby v reakci na QueryInterface
volání naskenují mapu CRowsetBaseImpl
MODELU COM.
Nakonec odkaz CCustomRowset
na úpravou CCustomRowset
zdědit z CMyRowsetImpl
CMyRowsetBaseImpl
, následujícím způsobem:
class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>
CCustomRowset
nyní může použít IRowsetLocate
rozhraní při využití zbytku implementace třídy sady řádků.
Po dokončení můžete dynamicky určit sloupce vrácené příjemci.