Поделиться через


Поддержка уведомлений

Реализация точки подключения интерфейсов для поставщика и объекта-получателя

Для реализации уведомлений класс поставщика должен наследоваться от 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>

at4a5k5t.collapse_all(ru-ru,VS.110).gifНастройка компонентов сопоставления COM

К сопоставлению COM в наборе строк должны добавляться следующие элементы.

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Использование этого макроса позволяет всем пользователям, сделавшим вызов QueryInterface для точки подключения контейнера (основа IRowsetNotify) находить нужный интерфейс у поставщика.Примеры использования точек подключения см. в примере ATL POLYGON и в руководстве.

at4a5k5t.collapse_all(ru-ru,VS.110).gifНастройка компонентов сопоставления точек подключения

Необходимо добавить сопоставление точки подключения.Этот процесс выглядит приблизительно следующими образом.

BEGIN_CONNECTION_POINT_MAP(rowset-name)
     CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()

Сопоставление точки подключения позволяет компоненту, осуществляющему поиск интерфейса IRowsetNotify, находить его у поставщика.

at4a5k5t.collapse_all(ru-ru,VS.110).gifЗадание свойств

К поставщику должны добавляться следующие свойства.Добавлять свойства необходимо только исходя из поддерживаемого интерфейса.

Свойство.

Добавить в случае поддержки

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 не добавлен к цепочке наследования, компилятор удаляет весь код из потока компиляции, таким образом, делая его меньше.

См. также

Основные понятия

Дополнительные способы использования поставщика