Podpora oznámení
Implementace rozhraní spojovacího bodu u zprostředkovatele a příjemce
K implementaci oznámení musí třída zprostředkovatele dědit z IRowsetNotifyCP a IConnectionPointContainer.
IRowsetNotifyCP
implementuje lokalitu zprostředkovatele pro rozhraní spojovacího bodu IRowsetNotify. IRowsetNotifyCP
implementuje funkce všesměrového vysílání, které radí naslouchacím procesům v spojovacím bodu IID_IRowsetNotify
změn v obsahu sady řádků.
Musíte také implementovat a zaregistrovat IRowsetNotify
příjemce (označovaný také jako jímka) pomocí IRowsetNotifyImpl , aby příjemce mohl zpracovávat oznámení. Informace o implementaci rozhraní spojovacího bodu pro příjemce naleznete v tématu Příjem oznámení.
Třída také musí mít mapu, která definuje položku spojovacího bodu, například takto:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
Přidání IRowsetNotify
Chcete-li přidat IRowsetNotify
, musíte přidat IConnectionPointContainerImpl<rowset-name>
a IRowsetNotifyCP<rowset-name>
do řetězu dědičnosti.
Tady je například řetězec dědičnosti pro RUpdateRowset
updatePV:
Poznámka:
Vzorový kód se může lišit od toho, co je zde uvedeno; vzorový kód byste měli považovat za aktuální verzi.
///////////////////////////////////////////////////////////////////////////
// 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>
Nastavení položek mapování modelu COM
V sadě řádků musíte také přidat následující položky na mapu MODELU COM:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
Tato makra umožňují každému volajícímu QueryInterface
pro váš kontejner spojovacího bodu (základ) IRowsetNotify
najít požadované rozhraní vašeho poskytovatele. Příklad použití spojovacích bodů najdete v ukázce a kurzu ATL POLYGON.
Nastavení položek mapování spojovacích bodů
Musíte také přidat mapu spojovacího bodu. Výsledek by měl vypadat přibližně takto:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
Tato mapa spojovacího bodu umožňuje komponentě, která hledá rozhraní, aby ho IRowsetNotify
našli ve vašem poskytovateli.
Nastavení vlastností
Ke svému poskytovateli musíte také přidat následující vlastnosti. Stačí přidat vlastnosti jenom na základě rozhraní, která podporujete.
Vlastnost | Přidání, pokud podporujete |
---|---|
DBPROP_IConnectionPointContainer | Always |
DBPROP_NOTIFICATIONGRANULARITY | Always |
DBPROP_NOTIFICATIONPHASES | Always |
DBPROP_NOTIFYCOLUMNSET | IRowsetChange |
DBPROP_NOTIFYROWDELETE | IRowsetChange |
DBPROP_NOTIFYROWINSERT | IRowsetChange |
DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE | Always |
DBPROP_NOTIFYROWFIRSTCHANGE | IRowsetUpdate |
DBPROP_NOTIFYROWSETRELEASE | Always |
DBPROP_NOTIFYROWUNDOCHANGE | IRowsetUpdate |
DBPROP_NOTIFYROWUNDODELETE | IRowsetUpdate |
DBPROP_NOTIFYROWUNDOINSERT | IRowsetUpdate |
DBPROP_NOTIFYROWUPDATE | IRowsetUpdate |
Většina implementace oznámení je již vložena do šablon zprostředkovatele OLE DB. Pokud do řetězu dědičnosti nepřidáte IRowsetNotifyCP
, kompilátor odebere veškerý tento kód z kompilačního streamu, čímž zmenší velikost kódu.