Поддержка уведомлений
Реализация точки подключения интерфейсов для поставщика и объекта-получателя
Для реализации уведомлений класс поставщика должен наследоваться от IRowsetNotifyCP и IConnectionPointContainer.
IRowsetNotifyCP реализует сайт поставщика для интерфейса точки подключения IRowsetNotify.IRowsetNotifyCP реализует широковещательные функции для уведомления пользователей в точке подключения IID_IRowsetNotify об изменениях содержимого набора строк.
Чтобы объект-получатель смог обрабатывать уведомления, на объекте-получателе (также называемом приемник) должна производится реализация и регистрация IRowsetNotify с помощью IRowsetNotifyImpl.Дополнительные сведения по реализации точки подключения интерфейса на объекте-получателе см. в разделе Получение уведомлений.
Кроме того, класс должен содержать сопоставление, определяющее точку ввода соединения, подобную указанной ниже.
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Добавление IRowsetNotify
Чтобы добавить IRowsetNotify, необходимо добавить IConnectionPointContainerImpl<rowset-name> и IRowsetNotifyCP<rowset-name> к цепочке наследования.
Рассмотрим, например, цепочку наследования для RUpdateRowset в UpdatePV:
Примечание |
---|
Образец кода может отличаться от приведенного в примере; рассматривать образец кода следует как более современную версию. |
///////////////////////////////////////////////////////////////////////////
// class RUpdateRowset (in rowset.h)
class RUpdateRowset :
public CRowsetImpl< RUpdateRowset, CAgentMan, CUpdateCommand,
CAtlArray< CAgentMan, CAtlArray<CAgentMan> >, CSimpleRow,
IRowsetScrollImpl< RUpdateRowset, IRowsetScroll > >,
public IRowsetUpdateImpl< RUpdateRowset, CAgentMan >,
public IConnectionPointContainerImpl<RUpdateRowset>,
public IRowsetNotifyCP<RUpdateRowset>
Настройка компонентов сопоставления COM
К сопоставлению COM в наборе строк должны добавляться следующие элементы.
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Использование этого макроса позволяет всем пользователям, сделавшим вызов QueryInterface для точки подключения контейнера (основа IRowsetNotify) находить нужный интерфейс у поставщика.Примеры использования точек подключения см. в примере ATL POLYGON и в руководстве.
Настройка компонентов сопоставления точек подключения
Необходимо добавить сопоставление точки подключения.Этот процесс выглядит приблизительно следующими образом.
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Сопоставление точки подключения позволяет компоненту, осуществляющему поиск интерфейса IRowsetNotify, находить его у поставщика.
Задание свойств
К поставщику должны добавляться следующие свойства.Добавлять свойства необходимо только исходя из поддерживаемого интерфейса.
Свойство. |
Добавить в случае поддержки |
---|---|
DBPROP_IConnectionPointContainer |
Всегда |
DBPROP_NOTIFICATIONGRANULARITY |
Всегда |
DBPROP_NOTIFICATIONPHASES |
Всегда |
DBPROP_NOTIFYCOLUMNSET |
IRowsetChange |
DBPROP_NOTIFYROWDELETE |
IRowsetChange |
DBPROP_NOTIFYROWINSERT |
IRowsetChange |
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE |
Всегда |
DBPROP_NOTIFYROWFIRSTCHANGE |
IRowsetUpdate |
DBPROP_NOTIFYROWSETRELEASE |
Всегда |
DBPROP_NOTIFYROWUNDOCHANGE |
IRowsetUpdate |
DBPROP_NOTIFYROWUNDODELETE |
IRowsetUpdate |
DBPROP_NOTIFYROWUNDOINSERT |
IRowsetUpdate |
DBPROP_NOTIFYROWUPDATE |
IRowsetUpdate |
Большая часть реализации уведомлений уже внедрена в шаблоны поставщика OLE DB.Из-за функции компилятора в Visual C++ .NET, если IRowsetNotifyCP не добавлен к цепочке наследования, компилятор удаляет весь код из потока компиляции, таким образом, делая его меньше.