Змінення успадкування 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