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


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

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

Для реализации уведомлений класс поставщика должен наследоваться от 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_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. Если вы не добавляете IRowsetNotifyCP в цепочку наследования, компилятор удаляет весь код из потока компиляции, что делает размер кода меньше.

См. также

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