实现服务提供程序入口点函数

适用于:Outlook 2013 | Outlook 2016

每个服务提供程序 DLL 都有一个入口点函数,MAPI 调用该入口点函数来加载它。 请注意,此入口点函数与 DllMain(Win32 DLL 入口点函数)不同。

根据提供程序的类型,提供程序入口点函数符合不同的原型。 MAPI 为服务提供商定义不同的入口点函数原型。

Provider 入口点函数原型
消息存储提供程序
MSProviderInit
传输提供程序
XPProviderInit
通讯簿提供程序
ABProviderInit

这些原型中的许多功能对于所有服务提供商类型都是相同的。

通讯簿、消息存储和传输提供程序在其入口点函数中执行以下两个main任务:

  1. 检查服务提供程序接口的版本 (SPI) ,以确保 MAPI 使用的版本与服务提供商正在使用的版本兼容。 使用包含 MAPI SPI 版本的 lpulMAPIVer 参数和包含 SPI 版本的 lpulProviderVer 参数来执行检查。 这些参数是 32 位无符号整数,由三个部分组成:
  • 位 24 到 31 表示主版本。

  • 位 16 到 23 表示次要版本。

  • 位 0 到 15 表示更新标识符。 尽管主版本号很少更改,但每当发布 MAPI 且 SPI 发生更改时,次要版本号会更改。 更新标识符是 Microsoft 内部内部版本;它用于在开发过程中跟踪更改。 MAPI 定义 mapispi.h 头文件中记录的CURRENT_SPI_VERSION常量,以指示当前的 SPI 版本。 如果使用的 SPI 版本比 MAPI 所使用的版本更新,检查失败并显示错误MAPI_E_VERSION。

  1. 创建提供程序对象的实例。 由于提供程序可以多次启动和初始化,因此每次发生这种情况时都应创建一个新实例。 当提供程序出现在由一个或多个客户端同时使用的多个配置文件中时,或者在单个配置文件中多次出现提供程序时,它们会多次启动。 正如入口点函数原型因提供程序的类型而异一样,提供程序对象的类型也是如此。

    如果要编写通讯簿提供程序,请实现 IABProvider :IUnknown。 如果要编写消息存储提供程序,请实现 IMSProvider :IUnknown。 有关详细信息,请参阅 加载消息存储提供程序

    如果要编写传输提供程序,请实现 IXPProvider :IUnknown。 有关详细信息,请参阅 初始化传输提供程序

另请参阅

启动服务提供程序