Поделиться через


Изменение порядка наследования класса RMyProviderRowset

Чтобы добавить интерфейс IRowsetLocate к примеру простого поставщика, предназначенного только для чтения, измените порядок наследования класса RMyProviderRowset. Изначально класс RMyProviderRowset наследуется от класса CRowsetImpl. В этом случае необходимо определить его наследование от класса CRowsetBaseImpl.

Для этого создайте в файле MyProviderRS.h новый класс CMyRowsetImpl:

////////////////////////////////////////////////////////////////////////
// MyProviderRS.h

template <class T, class Storage, class CreatorClass, class ArrayType = CAtlArray<Storage> >
class CMyRowsetImpl:
   public CRowsetImpl<T, Storage, CreatorClass, ArrayType, CSimpleRow, IRowsetLocateImpl< T, IRowsetLocate > >
{
...
};

В файле MyProviderRS.h измените схему интерфейса COM следующим образом:

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

При этом создается схема интерфейса COM, в которой определяется вызов в классе CMyRowsetImpl метода QueryInterface одновременно для интерфейсов IRowset и IRowsetLocate. Чтобы получить все реализации других классов набора строк, класс CMyRowsetImpl повторно связывается в схеме с классом CRowsetBaseImpl, определенным в шаблонах OLE DB. В схеме используется макрос COM_INTERFACE_ENTRY_CHAIN, в котором определяется поиск с помощью шаблонов OLE DB в схеме COM класса CRowsetBaseImpl при вызове метода QueryInterface.

Свяжите класс RAgentRowset с классом CMyRowsetBaseImpl. Для этого определите наследование класса RAgentRowset от CMyRowsetImpl, как показано ниже:

class RAgentRowset : public CMyRowsetImpl<RAgentRowset, CAgentMan, CMyProviderCommand>

После этого в классе RAgentRowset можно использовать интерфейс IRowsetLocate, а также возможности остальных реализаций класса набора строк.

По завершении можно выполнить динамическое определение столбцов, возвращаемых в объект-получатель.

См. также

Ссылки

Усовершенствование простого поставщика только для чтения