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

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

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

шаблон lt; класс T, класс хранения, класс CreatorClass, класс ArrayType = CSimpleArray <Storage> >
класс CMyRowsetImpl:
   общественного класса CRowsetBaseImpl < T, хранения, CreatorClass, ArrayType >,
   государственные IRowsetLocateImpl <T>
{
   typedef класса CRowsetBaseImpl < T, хранения, 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()
}

Теперь создайте карту интерфейса COM, который говорит CMyRowsetImpl вызывать QueryInterface для IRowset и IRowsetLocate интерфейсов.

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

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

Для того чтобы получить все из осуществления для других классов набора строк, связать CMyRowsetImpl класса для класса CRowsetBaseImpl класс, определенный шаблонами OLE DB. Для этого используйте макрос COM_INTERFACE_ENTRY_CHAIN , как показано в следующем коде. Макрос COM_INTERFACE_ENTRY_CHAIN рассказывает шаблоны OLE DB для сканирования карту COM в класса CRowsetBaseImpl в ответ на вызов 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()

И наконец, ссылка RAgentRowset в CMyRowsetBaseImpl , изменяя RAgentRowset наследования от CMyRowsetImpl , как показано здесь:

класс RAgentRowset: государственные CMyRowsetImpllt;RAgentRowset, CAgentMan, CMyProviderCommand & gt

RAgentRowsetТеперь можно использовать IRowsetLocate интерфейс используя остальной части осуществления для класса набора строк при.

Когда это будет сделано, можно приступать к реализации IRowsetLocateImpl.

Index