IMSLogon::Advise
适用于:Outlook 2013 | Outlook 2016
向消息存储提供程序注册对象,以获取有关消息存储中更改的通知。 然后,消息存储会将有关更改的通知发送到已注册的对象。
HRESULT Advise(
ULONG cbEntryID,
LPENTRYID lpEntryID,
ULONG ulEventMask,
LPMAPIADVISESINK lpAdviseSink,
ULONG FAR * lpulConnection
);
参数
cbEntryID
[in] lpEntryID 参数指向的条目标识符的大小(以字节为单位)。
lpEntryID
[in]指向应生成通知的对象条目标识符的指针。 此对象可以是文件夹、邮件或邮件存储区中的其他任何对象。 或者,如果 MAPI 将 cbEntryID 参数设置为 0 并为 lpEntryID 传递 null,则建议接收器会提供有关整个消息存储区更改的通知。
ulEventMask
[in]针对 MAPI 将生成通知的对象发生的通知事件类型的事件掩码。 掩码筛选特定情况。 每个事件类型都有一个与其关联的结构,其中包含有关该事件的其他信息。 下表列出了可能的事件类型及其相应的结构。
通知事件类型 | 相应的结构 |
---|---|
fnevCriticalError |
ERROR_NOTIFICATION |
fnevNewMail |
NEWMAIL_NOTIFICATION |
fnevObjectCreated |
OBJECT_NOTIFICATION |
fnevObjectDeleted |
OBJECT_NOTIFICATION |
fnevObjectModified |
OBJECT_NOTIFICATION |
fnevObjectCopied |
OBJECT_NOTIFICATION |
fnevObjectMoved |
OBJECT_NOTIFICATION |
fnevSearchComplete |
OBJECT_NOTIFICATION |
fnevStatusObjectModified |
STATUS_OBJECT_NOTIFICATION |
lpAdviseSink
[in]指向在会话对象发生事件时调用的建议接收器对象的指针,该会话对象已请求通知。 此建议接收器对象必须已存在。
lpulConnection
[out]指向变量的指针,该变量在成功返回时保存通知注册的连接号。 连接号必须为非零。
返回值
S_OK
调用成功,并返回了预期的值。
MAPI_E_NO_SUPPORT
MAPI 或一个或多个服务提供商不支持此操作。
备注
消息存储提供程序实现 IMSLogon::Advise 方法,以便为通知回调注册对象。 每当对指示的对象发生更改时,提供程序都会检查在 ulEventMask 参数中设置了哪些事件掩码位,以及发生了哪种类型的更改。 如果设置了位,则提供程序为 lpAdviseSink 参数指示的建议接收器对象调用 IMAPIAdviseSink::OnNotify 方法来报告事件。 在通知结构中传递给 OnNotify 例程的数据描述事件。
对 OnNotify 的 调用可以在更改对象的调用期间发生,也可以在以后的任何时间发生。 在支持多个执行线程的系统上,对 OnNotify 的调用可以在任何线程上发生。 若要安全地处理在不合时宜时发生的 对 OnNotify 的调用,客户端应用程序应使用 HrThisThreadAdviseSink 函数。
若要提供通知,实现 建议 的消息存储提供程序需要保留指向 lpAdviseSink 建议接收器对象的指针的副本;为此,提供程序调用建议接收器的 IUnknown::AddRef 方法,以维护其对象指针,直到通过调用 IMSLogon::Unadvise 方法取消通知注册。 建议实现应为通知注册分配一个连接号,并在 lpulConnection 参数中返回该连接号之前,在此连接号上调用 AddRef。 服务提供商可以在取消注册之前释放建议接收器对象,但在调用 Unadvise 之前,他们不得释放连接号。
在对 建议 的调用成功后,在调用 Unadvise 之前,必须准备好提供程序来释放建议接收器对象。 因此,提供商应在 建议 返回后释放其建议接收器对象,除非它具有特定的长期用途。
有关通知过程的详细信息,请参阅 MAPI 中的事件通知。