Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby dodać IRowsetLocate interfejs do prostego przykładu dostawcy tylko do odczytu, zmodyfikuj dziedziczenie elementu CCustomRowset. CCustomRowset Początkowo dziedziczy z CRowsetImplklasy . Należy zmodyfikować go, aby dziedziczył z CRowsetBaseImplelementu .
W tym celu utwórz nową klasę , CCustomRowsetImplw niestandardowej klasie RS.h:
////////////////////////////////////////////////////////////////////////
// CustomRS.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 zmodyfikuj mapę interfejsu COM w pliku CustomRS.h w następujący sposób:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Ten kod tworzy mapę interfejsu COM, która informuje CMyRowsetImpl o wywołaniu QueryInterface zarówno interfejsów, jak IRowset i IRowsetLocate . Aby uzyskać całą implementację innych klas zestawu wierszy, mapa łączy CMyRowsetImpl klasę z powrotem z CRowsetBaseImpl klasą zdefiniowaną przez szablony OLE DB. Mapa używa makra COM_INTERFACE_ENTRY_CHAIN, które nakazuje szablonom OLE DB skanowanie mapy COM w CRowsetBaseImpl odpowiedzi na QueryInterface wywołanie.
Na koniec połącz się CMyRowsetBaseImpl z poleceniem CCustomRowset , modyfikując dziedziczenie CCustomRowset z CMyRowsetImplelementu w następujący sposób:
class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>
CCustomRowset teraz może używać interfejsu IRowsetLocate , korzystając z pozostałej części implementacji dla klasy zestawu wierszy.
Po wykonaniu tej czynności można dynamicznie określić kolumny zwrócone użytkownikowi.