IMAPITable::Advise

适用于:Outlook 2013 | Outlook 2016

注册建议接收器对象,以接收影响表的指定事件的通知。

HRESULT Advise(
ULONG ulEventMask,
LPMAPIADVISESINK lpAdviseSink,
ULONG_PTR FAR * lpulConnection
);

参数

ulEventMask

[in]指示将生成通知的事件类型的值。 只有以下值有效:

fnevTableModified

lpAdviseSink

[in]指向用于接收后续通知的建议接收器对象的指针。 此建议接收器对象必须已分配。

lpulConnection

[out]指向表示成功通知注册的非零值的指针。

返回值

S_OK

通知注册已成功完成。

MAPI_E_NO_SUPPORT

表实现要么不支持更改其行和列,要么不支持通知。

备注

使用 IMAPITable::Advise 方法注册在提供程序中实现的表对象,以便进行通知回调。 每当表对象发生更改时,提供程序都会检查在 ulEventMask 参数中设置了哪个事件掩码位,以及发生了哪种类型的更改。 如果设置了位,提供程序将为 lpAdviseSink 参数指示的建议接收器对象调用 IMAPIAdviseSink::OnNotify 方法来报告事件。 在通知结构中传递给 OnNotify 例程的数据描述事件。

OnNotify 的 调用可以在更改对象的调用期间发生,也可以在以下任何时间发生。 在支持多个执行线程的系统上,对 OnNotify 的调用可以在任何线程上发生。 若要将不合时宜的时间发生的 对 OnNotify 的 调用转换为更安全的调用,提供程序应使用 HrThisThreadAdviseSink 函数。

若要提供通知,实现 建议 的提供程序需要保留指向 lpAdviseSink 建议接收器对象的指针的副本;为此,它会调用建议接收器的 IUnknown::AddRef 方法,以维护其对象指针,直到通过调用 IMAPITable::Unadvise 方法取消通知注册。 建议实现应为通知注册分配一个连接号,并在 lpulConnection 参数中返回该连接号之前,在此连接号上调用 AddRef。 服务提供商可以在取消注册之前释放建议接收器对象,但在调用 Unadvise 之前,他们不得释放连接号。

在对 建议 的调用成功后,在调用 Unadvise 之前,客户端必须做好释放建议接收器对象的准备。 因此,客户端应在 建议 返回后释放其建议接收器对象,除非它具有特定的长期用途。

由于通知的异步行为,更改表列设置的实现可以接收按上一列顺序组织信息的通知。 例如,对于刚刚从容器中删除的消息,可能会返回表行。 当进行了列设置更改并发送了有关它的信息,但通知表视图尚未使用该信息更新时,将发送此类通知。

有关通知过程的详细信息,请参阅 MAPI 中的事件通知。 有关表通知的特定信息,请参阅 关于表通知。 有关使用 IMAPISupport 方法支持通知的信息,请参阅 支持事件通知

MFCMAPI 引用

有关 MFCMAPI 示例代码,请参阅下表。

文件 函数 Comment
ContentsTableListCtrl.cpp
CContestTableListCtrl::NotificationOn
MFCMAPI 使用 IMAPITable::Advise 方法注册通知,以允许表视图保持最新状态。

另请参阅

HrThisThreadAdviseSink
IMAPIAdviseSink::OnNotify
IMAPITable::Unadvise
TABLE_NOTIFICATION
IMAPITable:IUnknownMFCMAPI 作为代码示例