Modyfikowanie dziedziczenia obiektu RMyProviderRowset
Aby dodać IRowsetLocate interfejs na przykładzie prostego dostawca tylko do odczytu, zmodyfikować ustawienia dziedziczenia RMyProviderRowset.Początkowo RMyProviderRowset dziedziczy z CRowsetImpl.Należy zmodyfikować, aby dziedziczyć 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, która informuje o tym, CMyRowsetImpl do wywołania QueryInterface dla obu IRowset i IRowsetLocate interfejsów.Aby uzyskać wszystkie wykonania dla innych wierszy klas, łącza mapy CMyRowsetImpl klasy z powrotem do CRowsetBaseImpl klasy zdefiniowanej za pomocą OLE DB szablonów; Mapa korzysta z makra COM_INTERFACE_ENTRY_CHAIN, który opowiada szablonów OLE DB do skanowania mapę COM w CRowsetBaseImpl w odpowiedzi na QueryInterface zadzwonić.
Wreszcie, link 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 interfejs korzystając z resztą implementacji dla klasy zestaw wierszy.
Gdy to zrobisz, możesz dynamiczne określenie kolumny zwracane do konsumenta,.