Udostępnij przez


Obsługa powiadomień

Implementowanie interfejsów punktów połączenia u dostawcy i odbiorcy

Aby zaimplementować powiadomienia, klasa dostawcy musi dziedziczyć z klasy IRowsetNotifyCP i IConnectionPointContainer.

IRowsetNotifyCP implementuje lokację dostawcy dla interfejsu punktu połączenia IRowsetNotify. IRowsetNotifyCP implementuje funkcje emisji, aby doradzać odbiornikom w punkcie IID_IRowsetNotify połączenia zmian zawartości zestawu wierszy.

Należy również zaimplementować i zarejestrować IRowsetNotify użytkownika (znanego również jako ujście) przy użyciu interfejsu IRowsetNotifyImpl , aby odbiorca mógł obsługiwać powiadomienia. Aby uzyskać informacje na temat implementowania interfejsu punktu połączenia dla konsumenta, zobacz Odbieranie powiadomień.

Ponadto klasa musi mieć mapę, która definiuje wpis punktu połączenia, w następujący sposób:

BEGIN_CONNECTION_POINT_MAP
   CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP

Dodawanie elementu IRowsetNotify

Aby dodać IRowsetNotifyelement , należy dodać IConnectionPointContainerImpl<rowset-name> element i IRowsetNotifyCP<rowset-name> do łańcucha dziedziczenia.

Na przykład poniżej znajduje się łańcuch dziedziczenia dla RUpdateRowset elementu w usłudze UpdatePV:

Uwaga

Przykładowy kod może się różnić od tego, co jest tutaj wymienione; Przykładowy kod powinien być traktowany jako bardziej aktualna wersja.

///////////////////////////////////////////////////////////////////////////
// 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>

Ustawianie wpisów mapy COM

Musisz również dodać następujące elementy do mapy COM w zestawie wierszy:

COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)

Te makra umożliwiają każdemu, kto wywołuje QueryInterface kontener punktów połączenia (podstawa IRowsetNotify) w celu znalezienia żądanego interfejsu u dostawcy. Przykład użycia punktów połączenia można znaleźć w przykładzie ATL POLYGON i samouczku.

Ustawianie wpisów mapy punktu połączenia

Należy również dodać mapę punktów połączenia. Powinien on wyglądać mniej więcej tak:

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

Ta mapa punktu połączenia umożliwia składnikowi wyszukiwania interfejsu IRowsetNotify w dostawcy.

Ustawianie właściwości

Należy również dodać następujące właściwości do dostawcy. Wystarczy dodać właściwości tylko na podstawie interfejsów, które obsługujesz.

Właściwości Dodaj, jeśli obsługujesz
DBPROP_IConnectionPointContainer Zawsze
DBPROP_NOTIFICATIONGRANULARITY Zawsze
DBPROP_NOTIFICATIONPHASES Zawsze
DBPROP_NOTIFYCOLUMNSET IRowsetChange
DBPROP_NOTIFYROWDELETE IRowsetChange
DBPROP_NOTIFYROWINSERT IRowsetChange
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE Zawsze
DBPROP_NOTIFYROWFIRSTCHANGE IRowsetUpdate
DBPROP_NOTIFYROWSETRELEASE Zawsze
DBPROP_NOTIFYROWUNDOCHANGE IRowsetUpdate
DBPROP_NOTIFYROWUNDODELETE IRowsetUpdate
DBPROP_NOTIFYROWUNDOINSERT IRowsetUpdate
DBPROP_NOTIFYROWUPDATE IRowsetUpdate

Większość implementacji powiadomień jest już osadzona w szablonach dostawcy OLE DB. Jeśli nie dodasz IRowsetNotifyCP do łańcucha dziedziczenia, kompilator usunie cały ten kod ze strumienia kompilacji, co spowoduje zmniejszenie rozmiaru kodu.

Zobacz też

Zaawansowane techniki dostawcy