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. Musisz zmodyfikować dziedziczą z CRowsetBaseImpl. Aby to zrobić, należy utworzyć nową klasę, CMyRowsetImpl , w MyProviderRS.h:

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

lt szablonu; Klasa T, klasy magazynowania, klasy CreatorClass, klasa ArrayType = CSimpleArray <Storage> >
Klasa CMyRowsetImpl:
   CRowsetBaseImpl publiczne < T, magazynowania, CreatorClass, ArrayType >,
   publiczne IRowsetLocateImpl <T>
{
   element TypeDef CRowsetBaseImpl < T, magazynowania, CreatorClass, ArrayType > _RowsetBaseClass;

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
}

Teraz utworzyć mapę interfejsu COM, który mówi CMyRowsetImpl do wywołania metody QueryInterface dla IRowset i IRowsetLocate interfejsy.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()

Aby uzyskać wszystkie realizacji dla innych klas wierszy, łącze CMyRowsetImpl klasy Wróć do klasy CRowsetBaseImpl , zdefiniowana przez szablony OLE DB. Aby to zrobić, należy użyć makra COM_INTERFACE_ENTRY_CHAIN , jak pokazano w poniższym kodzie. Makro COM_INTERFACE_ENTRY_CHAIN mówi OLE DB szablony do skanowania mapę COM w CRowsetBaseImpl w odpowiedzi na wywołanie metody QueryInterface.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS.h

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

Wreszcie, łącze RAgentRowset do CMyRowsetBaseImpl przez zmodyfikowanie RAgentRowset aby dziedziczyła CMyRowsetImpl , jak pokazano tutaj:

klasa RAgentRowset: CMyRowsetImpllt publicznych;RAgentRowset, CAgentMan, CMyProviderCommand & gt

RAgentRowsetmożna teraz używać IRowsetLocate interfejsu przy jednoczesnym wykorzystaniu pozostałej części realizacji dla klasy wierszy.

Podczas tej czynności można przystąpić do wykonania IRowsetLocateImpl.

Index