Modifica dell'ereditarietà di RMyProviderRowset

Per aggiungere il IRowsetLocate di interfaccia all'esempio del provider semplice di sola lettura, modificare l'ereditarietà di RMyProviderRowset . Inizialmente, RMyProviderRowset eredita da CRowsetImpl. È necessario modificare che erediti da CRowsetBaseImpl. Per fare questo, creare una nuova classe, CMyRowsetImpl , in MyProviderRS:

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS. H

modello lt; classe T, classe Storage, classe CreatorClass, classe ArrayType = CSimpleArray <Storage> >
classe CMyRowsetImpl:
   CRowsetBaseImpl pubblica < T, Storage, CreatorClass, ArrayType >
   IRowsetLocateImpl pubblica <T>
{
   typedef CRowsetBaseImpl < T, Storage, 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()
}

Ora, creare una mappa dell'interfaccia COM che dice CMyRowsetImpl di chiamare QueryInterface per entrambi il IRowset e IRowsetLocate interfacce.

////////////////////////////////////////////////////////////////////////
/ / MyProviderRS. H

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY_IID (IID_IRowsetLocate, IRowset)
   COM_INTERFACE_ENTRY(IRowset)
END_COM_MAP()

Per ottenere tutti l'implementazione per le altre classi di set di righe, collegare il CMyRowsetImpl classe torna alla classe CRowsetBaseImpl definita da modelli OLE DB. A tale scopo, utilizzare una macro COM_INTERFACE_ENTRY_CHAIN , come mostrato nel codice seguente. La macro COM_INTERFACE_ENTRY_CHAIN racconta modelli OLE DB per digitalizzare la mappa COM in CRowsetBaseImpl in risposta a una chiamata QueryInterface.

////////////////////////////////////////////////////////////////////////
/ / 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()

Infine, collegare RAgentRowset a CMyRowsetBaseImpl modificando RAgentRowset che erediti da CMyRowsetImpl , come illustrato di seguito:

classe RAgentRowset: CMyRowsetImpllt pubblica;RAgentRowset, CAgentMan, CMyProviderCommand & gt

RAgentRowsetora possibile utilizzare la IRowsetLocate interfaccia mentre approfittando del resto dell'implementazione per la classe di set di righe.

Quando questo è fatto, si è pronti per implementare IRowsetLocateImpl.

Index