初始化传输提供程序

适用于:Outlook 2013 | Outlook 2016

传输后台处理程序接口定义对传输提供程序的 MAPI 后台处理程序的调用。 传输提供程序在动态链接库中实现这些例程, (DLL) 。 MAPI 后台处理程序使用的 DLL 中的第一个直接入口点必须是传输提供程序初始化函数 XPProviderInit

MAPI 使用例程 GetProcAddress 获取服务提供程序初始化例程的地址,然后调用该例程。 对于传输提供程序,初始化例程的名称为 XPProviderInit 。 它与其他类型的 MAPI 服务提供程序不同,因此一个 DLL 可以包含服务提供程序类型的任意组合,但只能包含一个特定类型的服务提供程序。 但是,给定类型的一个服务提供程序可以实现其类型的多个服务。 例如,一个传输提供程序可以将消息传输功能实现到多个消息服务。

mapispi.h 头文件具有传输提供程序初始化函数的函数原型的类型定义,以及它的预定义过程名称。 通过使用 GetProcAddress 使用的相同名称命名 C 和 C++ 文件中的初始化例程,并在 DLL.DEF 文件中使用简单的导出声明,可以自动获取初始化例程的参数的类型检查。 有关示例,请参阅示例传输提供程序源代码。 有关详细信息,请参阅 传输提供程序示例

如果服务提供商的初始化调用成功,但返回的服务提供程序接口版本号太小,MAPI 无法处理,则 MAPI 会立即调用服务提供商对象的 Release 方法,并像初始化调用失败一样继续MAPI_E_VERSION。 这样,MAPI 和服务提供商共同定义它们可以处理的服务提供商接口版本号范围,如果没有任何内容匹配,则服务提供商加载失败,返回值MAPI_E_VERSION。

MAPI 后台处理程序获取对服务提供程序资源的访问权限的最后一步是登录到传输提供程序。 MAPI 后台处理程序调用从 XPProviderInit 返回的 IXPProvider::TransportLogon 方法。 这是一个调用,其中凭据(如果使用)将被选中,并且可以允许对话框。

如果进程在同一传输提供程序和 MAPI 会话上打开第二个传输会话,则传输提供程序 DLL 不应创建第二个提供程序对象。 第一个提供程序对象应用于登录到第二个传输会话。 应对传输提供程序进行编程,以支持单个提供程序对象中的多个传输会话。 仅当在同一进程中使用不同的 MAPI 会话时,才应创建第二个提供程序对象。