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.