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,.

Zobacz też

Informacje

Udoskonalanie prostego dostawcy tylko do odczytu