支持通知
在提供程序和使用者上实现连接点接口
若要实现通知,提供程序类必须从 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 接口的组件在提供程序中查找它。
设置属性
还需要将以下属性添加到提供程序。 只需要添加基于所支持接口的属性。
属性 |
如果支持则添加 |
---|---|
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 提供程序模板中。 由于 Visual C++ .NET 中某个编译器功能的原因,如果不将 IRowsetNotifyCP 添加到继承链,编译器将从编译流中移除所有那些代码,从而使代码大小变小。