Modyfikowanie dziedziczenie RMyProviderRowset
Aby dodać IRowsetLocate interfejsu, na przykład prostego dostawcy tylko do odczytu, modyfikowanie dziedziczenia z RMyProviderRowset.Początkowo RMyProviderRowset dziedziczy z CRowsetImpl.Należy zmodyfikować go dziedziczą z CRowsetBaseImpl.
Aby to zrobić, należy utworzyć nową klasę, CMyRowsetImpl, w 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 > >
{
...
};
Teraz Edytuj mapę interfejsu COM w MyProviderRS.h są następujące:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Tworzy mapę interfejsu COM, informujących CMyRowsetImpl do wywołania QueryInterface dla obu IRowset i IRowsetLocate interfejsów.Aby uzyskać wszystkie wykonania innych wierszy klasy, łącza mapy CMyRowsetImpl klasy z powrotem do CRowsetBaseImpl klasy zdefiniowanej przez OLE DB szablony; Mapa używa makro COM_INTERFACE_ENTRY_CHAIN, która nakazuje szablonów OLE DB do skanowania mapę COM w CRowsetBaseImpl w odpowiedzi na QueryInterface wywołania.
Wreszcie, łącze RAgentRowset do CMyRowsetBaseImpl przez zmodyfikowanie RAgentRowset odziedziczone po CMyRowsetImpl, w następujący sposób:
class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>
RAgentRowsetmożna teraz używać IRowsetLocate interfejsu zalet reszty implementacji klasy zestawu wierszy.
Podczas tej czynności można dynamicznego określania kolumn zwracana do konsumenta.