实现通讯簿提供程序登录和注销

适用于:Outlook 2013 | Outlook 2016

通讯簿提供程序通过实现 IABProvider :IUnknown 接口的方法来支持会话登录和注销。 IABProvider 接口直接继承自 IUnknown,只添加其他两种方法:LogonShutdown

注销

每当提供程序添加到当前配置文件并且客户端支持动态重新配置时,MAPI 都会在每个会话开始时调用提供程序的 IABProvider::Logon 方法。 当 MAPI 调用 IABProvider::Logon 方法时,通讯簿提供程序将开始其登录过程。

实现 IABProvider::Log

  1. 初始化 MAPI 传入的所有输出参数指针。

  2. 调用支持对象的 IUnknown::AddRef 方法以递增其引用计数。

  3. 调用支持对象的 IMAPISupport::OpenProfileSection 方法以打开包含有关提供程序的配置信息的配置文件部分。 如果要进行更改,请为 lpUID 参数和 MAPI_MODIFY 标志传递 NULL。

  4. 调用配置文件部分的 IMAPIProp::GetProps 方法以检索提供程序登录所需的属性,例如数据文件或数据库表的名称。

  5. 检查属性是否全部可用且有效。 如有必要且允许,则显示一个对话框,提示用户对无效或缺失的信息进行更正或添加,并调用配置文件部分的 IMAPIProp::SetProps 方法以保存任何更改。 应可用的一些常见属性包括:

    PR_DISPLAY_NAME (PidTagDisplayName)

    PR_ENTRYID (PidTagEntryId)

    PR_PROVIDER_DISPLAY (PidTagProviderDisplay)

    PR_RECORD_KEY (PidTagRecordKey)

    注意

    请勿 PR_RESOURCE_FLAGS (PidTagResourceFlags) 或 PR_PROVIDER_DLL_NAME (PidTagProviderDllName) 。 在登录时,这些属性是只读的。

  6. 如果一个或多个配置属性不可用,则失败并返回值MAPI_E_UNCONFIGURED。

  7. 调用 IMAPISupport::SetProviderUID 来注册 MAPIUID。 提供程序可以通过以下方式创建 MAPIUID

    • 调用 IMAPISupport::NewUID 方法。

    • 调用 UUIDGEN.EXE 工具以定义提供程序用于包含在其中一个头文件中的 GUID。

  8. 如果需要,请通过调用配置文件部分的 IMAPIProp::SetProps 方法,在当前配置文件中保存新创建的 MAPIUID

  9. 通过调用其 IUnknown::Release 方法释放配置文件部分。

  10. 实例化新的登录对象,并将 lppABLogon 参数的内容设置为此新对象的地址。

由于 MAPI 可以在会话期间多次调用 Logon 方法,因此最好通过创建多个登录对象并跟踪创建的每个对象,在实现中支持这一可能性。 通过支持多个 登录 调用,客户端应用程序的用户(例如)可以登录到具有不同标识的会话或使用不同的传递目标。

会话 结束时会调用关闭。 MAPI 调用 IABProvider::Shutdown 方法作为关闭会话所涉及的最后任务之一。 MAPI 已释放提供程序的所有登录对象,当提供程序收到此调用时,它可以假定这是它将接收的最后一次调用。 在 IABProvider::Shutdown 的实现中,执行你认为必要的任何最终清理。 例如,如果提供程序调用 MAPIInitIdle 以在会话期间使用空闲引擎,或者调用了任何尚未释放的对象的 IUnknown::Release 方法,则提供程序可能会调用 MAPIDeinitIdle

如果提供程序没有最终清理,则其实现可以由一行代码组成:

return S_OK;