支持通知
在提供程序和使用者上实现连接点接口
若要实现通知,提供程序类必须继承自 IRowsetNotifyCP 和 IConnectionPointContainer。
IRowsetNotifyCP
实现连接点接口 IRowsetNotify 的提供程序站点。 IRowsetNotifyCP
实现广播函数,就行集内容的更改连接点 IID_IRowsetNotify
向侦听器提供建议。
还必须使用 IRowsetNotifyImpl 在使用者(也称为接收器)上实现和注册 IRowsetNotify
,以便使用者可以处理通知。 有关在使用者上实现连接点接口的信息,请参阅接收通知。
此外,类必须具有定义连接点入口的映射,如下所示:
BEGIN_CONNECTION_POINT_MAP
CONNECTIONPOINT_ENTRY (IID_IRowsetNotify)
END_CONNECTION_POINT_MAP
添加 IRowsetNotify
若要添加 IRowsetNotify
,需要添加 IConnectionPointContainerImpl<rowset-name>
和 IRowsetNotifyCP<rowset-name>
到继承链。
例如,下面是 UpdatePV 中 RUpdateRowset
的继承链:
注意
示例代码可能与本文列出的代码不同;应将示例代码视为最新版本。
///////////////////////////////////////////////////////////////////////////
// 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 映射:
COM_INTERFACE_ENTRY(IConnectionPointContainer)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
这些宏允许为连接点容器(IRowsetNotify
的基础)调用 QueryInterface
的任何人在提供程序上查找请求的接口。 有关如何使用连接点的示例,请参阅 ATL POLYGON 示例和教程。
设置连接点映射条目
还需要添加连接点映射。 该值应类似于:
BEGIN_CONNECTION_POINT_MAP(rowset-name)
CONNECTION_POINT_ENTRY(_uuidof(IRowsetNotify))
END_CONNECTION_POINT_MAP()
此连接点映射允许查找 IRowsetNotify
接口的组件在提供程序中查找它。
设置属性
还需要将以下属性添加到提供程序。 只需根据支持的接口添加属性。
properties | 如果支持,请添加 |
---|---|
DBPROP_IConnectionPointContainer | Always |
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
到继承链,编译器将从编译流中删除所有代码,从而使代码更小。