Udostępnij za pośrednictwem


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.

Zobacz też

Informacje

Zwiększanie proste dostawcy tylko do odczytu