Modifica dell'ereditarietà di RCustomRowset

Per aggiungere l'interfaccia IRowsetLocate al semplice esempio di provider di sola lettura, modificare l'ereditarietà di CCustomRowset. Inizialmente eredita CCustomRowset da CRowsetImpl. È necessario modificarlo per ereditare da CRowsetBaseImpl.

A tale scopo, creare una nuova classe, , CCustomRowsetImplin 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 >>
{
...
};

Modificare ora la mappa dell'interfaccia COM in CustomRS.h in modo che sia la seguente:

BEGIN_COM_MAP(CMyRowsetImpl)
   COM_INTERFACE_ENTRY(IRowsetLocate)
   COM_INTERFACE_ENTRY_CHAIN(_RowsetBaseClass)
END_COM_MAP()

Questo codice crea una mappa dell'interfaccia COM che indica CMyRowsetImpl di chiamare QueryInterface entrambe le IRowset interfacce e IRowsetLocate . Per ottenere tutte le implementazioni per le altre classi di set di righe, la mappa collega nuovamente la CMyRowsetImpl classe alla CRowsetBaseImpl classe definita dai modelli OLE DB. La mappa usa la macro COM_INTERFACE_ENTRY_CHAIN, che indica ai modelli OLE DB di analizzare la mappa COM in CRowsetBaseImpl risposta a una QueryInterface chiamata.

Infine, collegarsi CCustomRowset a CMyRowsetBaseImpl modificando CCustomRowset per ereditare da CMyRowsetImpl, come indicato di seguito:

class CCustomRowset : public CMyRowsetImpl<CCustomRowset, CCustomWindowsFile, CCustomCommand>

CCustomRowset può ora usare l'interfaccia IRowsetLocate sfruttando il resto dell'implementazione per la classe del set di righe.

Al termine, è possibile determinare in modo dinamico le colonne restituite al consumer.

Vedi anche

Miglioramento di un provider semplice in sola lettura