IMAPISession::Advise
适用于:Outlook 2013 | Outlook 2016
注册以接收影响会话的指定事件的通知。
HRESULT Advise(
ULONG cbEntryID,
LPENTRYID lpEntryID,
ULONG ulEventMask,
LPMAPIADVISESINK lpAdviseSink,
ULONG_PTR lpulConnection
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符中的字节计数。
lpEntryID
[in]指向通讯簿或消息存储对象的入口标识符的指针,指示客户端正在注册以接收有关仅影响会话的事件的通知。
ulEventMask
[in]一个值掩码,指示客户端感兴趣的通知事件类型,并且应包含在注册中。 如果 lpEntryID 为 NULL,则 MAPI 会自动为客户端注册仅影响会话的关键错误事件。 当 lpEntryID 指向某个入口标识符时,以下值对 ulEventMask 参数有效:
fnevCriticalError
注册有关严重错误的通知,例如内存不足。
fnevExtended
注册有关特定于特定通讯簿或消息存储提供程序的事件以及有关会话关闭的通知。
fnevNewMail
注册有关新消息到达的通知。
fnevObjectCreated
注册有关创建新对象的通知。
fnevObjectCopied
注册有关正在复制对象的通知。
fnevObjectDeleted
注册有关正在删除对象的通知。
fnevObjectModified
注册有关正在修改对象的通知。
fnevObjectMoved
注册有关正在移动对象的通知。
fnevSearchComplete
注册有关搜索操作完成的通知。
lpAdviseSink
[in]指向建议接收器对象的指针,用于接收后续通知。 此建议接收器对象必须已分配。
lpulConnection
[out]指向非零数字的指针,该数字表示调用方的建议接收器对象与会话之间的连接。
返回值
S_OK
注册成功。
MAPI_E_INVALID_ENTRYID
lpEntryID 指向的条目标识符不表示有效的条目标识符。
MAPI_E_NO_SUPPORT
负责 lpEntryID 指向的入口标识符的服务提供商要么不支持 ulEventMask 参数中指定的事件类型,要么不支持通知。
MAPI_E_UNKNOWN_ENTRYID
配置文件中的任何服务提供商都无法处理 lpEntryID 指向的条目标识符。
备注
IMAPISession::Advise 方法在调用方的建议接收器对象、会话和(可选)服务提供商之间建立连接。 当 ulEventMask 参数中指定的一个或多个事件发生到 lpEntryID 指向的对象时,此连接用于将通知发送到建议接收器。 当 lpEntryID 为 NULL 时,目标对象是会话,并且仅针对严重错误和扩展事件发送通知。
当 lpEntryID 指向有效的条目标识符时,MAPI 将调用属于负责服务提供商的登录对象的 Advise 方法。 例如,如果 lpEntryID 指向通讯组列表的条目标识符,则 MAPI 将调用相应的通讯簿提供程序的 IABLogon::Advise 方法。
若要发送通知,服务提供商或 MAPI 会调用已注册的建议接收器的 IMAPIAdviseSink::OnNotify 方法。 通知结构 OnNotify 的参数之一包含描述特定事件的信息。
给调用方的说明
在支持多个执行线程的系统上,对 OnNotify 的调用也可以随时在任何线程上发生。 如果需要确保通知仅在特定线程的特定时间发生,请调用 HrThisThreadAdviseSink 函数以生成传递给 建议 方法的建议接收器对象。
若要确定客户端何时注销,请在服务提供商中通过调用 lpEntryID 设置为 NULL 且 cbEntryID 设置为 0 的 Advise 来注册通知。 发生注销时,你将收到 fnevExtended 通知。
在对 建议 的调用成功之后,在 调用 IMAPISession::Unadvise 以取消注册之前,请释放建议接收器对象,除非你有特定的长期用途。
有关通知过程的概述,请参阅 MAPI 中的事件通知。
有关处理通知的详细信息,请参阅 处理通知。
MFCMAPI 引用
有关 MFCMAPI 示例代码,请参阅下表。
文件 | 函数 | Comment |
---|---|---|
BaseDialog.cpp |
CBaseDialog::OnNotificationsOn |
MFCMAPI 使用 IMAPISession::Advise 方法针对会话注册通知。 |