Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.