Для добавления 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.