Udostępnij przez


Modyfikowanie dziedziczenia obiektu RCustomRowset

Aby dodać IRowsetLocate interfejs do prostego przykładu dostawcy tylko do odczytu, zmodyfikuj dziedziczenie elementu CCustomRowset. CCustomRowset Początkowo dziedziczy z CRowsetImplklasy . Należy zmodyfikować go, aby dziedziczył z CRowsetBaseImplelementu .

W tym celu utwórz nową klasę , CCustomRowsetImplw niestandardowej klasie 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 >>
{
...
};

Teraz zmodyfikuj mapę interfejsu COM w pliku CustomRS.h w następujący sposób:

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

Ten kod tworzy mapę interfejsu COM, która informuje CMyRowsetImpl o wywołaniu QueryInterface zarówno interfejsów, jak IRowset i IRowsetLocate . Aby uzyskać całą implementację innych klas zestawu wierszy, mapa łączy CMyRowsetImpl klasę z powrotem z CRowsetBaseImpl klasą zdefiniowaną przez szablony OLE DB. Mapa używa makra COM_INTERFACE_ENTRY_CHAIN, które nakazuje szablonom OLE DB skanowanie mapy COM w CRowsetBaseImpl odpowiedzi na QueryInterface wywołanie.

Na koniec połącz się CMyRowsetBaseImpl z poleceniem CCustomRowset , modyfikując dziedziczenie CCustomRowset z CMyRowsetImplelementu w następujący sposób:

class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>

CCustomRowset teraz może używać interfejsu IRowsetLocate , korzystając z pozostałej części implementacji dla klasy zestawu wierszy.

Po wykonaniu tej czynności można dynamicznie określić kolumny zwrócone użytkownikowi.

Zobacz też

Udoskonalanie prostego dostawcy tylko do odczytu