Щоб додати до 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.