Ändern der Vererbung von RMyProviderRowset

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.

Index