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 中的事件通知

另请参阅

HrThisThreadAdviseSink

IMAPIAdviseSink::OnNotify

IMSLogon::Unadvise

通知

IMSLogon : IUnknown