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.