Hinzufügen der IRowsetLocate -Schnittstelle, um dem einfachen schreibgeschützten Anbieter Beispiel, ändern Sie die Vererbung von RMyProviderRowset . Zunächst RMyProviderRowset erbt von CRowsetImpl. Sie müssen es zu erben von CRowsetBaseImpländern. Hierzu erstellen Sie eine neue Klasse, CMyRowsetImpl , in der Datei MyProviderRS.h:
////////////////////////////////////////////////////////////////////////
/ / Datei MyProviderRS.h
Vorlage Lt; Klasse T, Klasse Speicher, CreatorClass, Klasse ArrayType = CSimpleArray <Storage> >
CMyRowsetImpl-Klasse:
öffentliche CRowsetBaseImpl < T, Speicher, CreatorClass, ArrayType >,
öffentliche IRowsetLocateImpl <T>
{
Typedef CRowsetBaseImpl < T, Speicher, 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()
}
Erstellen Sie nun eine COM-Schnittstellenzuordnung, die mitteilt CMyRowsetImpl Aufrufen von QueryInterface für beide die IRowset und IRowsetLocate Schnittstellen.
////////////////////////////////////////////////////////////////////////
/ / Datei MyProviderRS.h
BEGIN_COM_MAP(CMyRowsetImpl)
COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()
Um alle die Ausführung für die Schemarowset-Klassen abzurufen, verknüpfen die CMyRowsetImpl Klasse zurück zur Klasse CRowsetBaseImpl durch den OLE DB-Vorlagen definiert. Verwenden Sie hierzu ein COM_INTERFACE_ENTRY_CHAIN -Makro, wie im folgenden Code gezeigt. Das COM_INTERFACE_ENTRY_CHAIN -Makro sagt OLE DB-Vorlagen zum Scannen der COM-Zuordnung im CRowsetBaseImpl in Reaktion auf einen QueryInterface -Aufruf.
////////////////////////////////////////////////////////////////////////
/ / Datei 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()
Schließlich link RAgentRowset zu CMyRowsetBaseImpl ändern RAgentRowset von Erben CMyRowsetImpl , wie hier gezeigt:
klasse RAgentRowset: öffentliche CMyRowsetImpllt;RAgentRowset, CAgentMan, CMyProviderCommand & gt
RAgentRowsetJetzt können die IRowsetLocate Schnittstelle gleichzeitig die Vorteile der übrigen Implementierung für die Rowsetklasse.
Wenn dies geschehen ist, sind Sie bereit, IRowsetLocateImpl implementieren.