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
RAgentRowset
moż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.