Ändern der Vererbung von RCustomRowset
Um die IRowsetLocate
Schnittstelle zum einfachen schreibgeschützten Anbieterbeispiel hinzuzufügen, ändern Sie die Vererbung von CCustomRowset
. Erbt zunächst CCustomRowset
von CRowsetImpl
. Sie müssen sie ändern, um sie zu erben.CRowsetBaseImpl
Erstellen Sie dazu eine neue Klasse in CCustomRowsetImpl
customRS.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 >>
{
...
};
Bearbeiten Sie nun die COM-Schnittstellenzuordnung in CustomRS.h wie folgt:
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY(IRowsetLocate)
COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()
Dieser Code erstellt eine COM-Schnittstellenzuordnung, die angibtCMyRowsetImpl
, sowohl für die als IRowsetLocate
auch für die IRowset
Schnittstellen aufzurufenQueryInterface
. Um alle Implementierungen für die anderen Rowsetklassen abzurufen, verknüpft die Zuordnung die CMyRowsetImpl
Klasse zurück mit der klasse, die CRowsetBaseImpl
von den OLE DB-Vorlagen definiert wurde. Die Zuordnung verwendet das COM_INTERFACE_ENTRY_CHAIN Makro, das OLE DB-Vorlagen angibt, die COM-Zuordnung CRowsetBaseImpl
als Reaktion auf einen QueryInterface
Aufruf zu scannen.
Abschließend können Sie eine Verknüpfung herstellen CCustomRowset
CMyRowsetBaseImpl
, indem CCustomRowset
Sie diese ändern, um von CMyRowsetImpl
, wie folgt, zu erben:
class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>
CCustomRowset
kann jetzt die IRowsetLocate
Schnittstelle verwenden, während die restliche Implementierung für die Rowset-Klasse genutzt wird.
Wenn dies geschieht, können Sie spalten dynamisch bestimmen, die an den Consumer zurückgegeben werden.