MSProviderInit

适用于:Outlook 2013 | Outlook 2016

初始化操作的消息存储提供程序。

属性
标头文件:
Mapispi.h
实现者:
消息存储提供程序
调用者:
MAPI
HRESULT MSProviderInit(
  HINSTANCE hInstance,
  LPMALLOC lpMalloc,
  LPALLOCATEBUFFER lpAllocateBuffer,
  LPALLOCATEMORE lpAllocateMore,
  LPFREEBUFFER lpFreeBuffer,
  ULONG ulFlags,
  ULONG ulMAPIVer,
  ULONG FAR * lpulProviderVer,
  LPMSPROVIDER FAR * lppMSProvider
);

参数

hInstance

[in]消息存储提供程序的动态链接库的实例 (DLL) MAPI 在链接时使用。

lpMalloc

[in]指向公开 OLE IMalloc 接口的内存分配器对象的指针。 消息存储提供程序在使用某些接口(如 IStream)时可能需要使用此分配方法。

lpAllocateBuffer

[in]指向 MAPIAllocateBuffer 函数的指针,用于分配内存。

lpAllocateMore

[in]指向 MAPIAllocateMore 函数的指针,用于分配额外的内存。

lpFreeBuffer

[in]指向 MAPIFreeBuffer 函数的指针,用于释放内存。

ulFlags

[in]标志的位掩码。 可以设置以下标志:

MAPI_NT_SERVICE

提供程序正在 Windows 服务的上下文中加载,这是一种特殊类型的进程,无法访问任何用户界面。

ulMAPIVer

[in]MAPI 使用的服务提供程序接口 (SPI) 的版本号。 有关当前版本号,请参阅 Mapispi.h 头文件。

lpulProviderVer

[out]指向此消息存储提供程序使用的 SPI 版本号的指针。

lppMSProvider

[out]指向指向已初始化消息存储提供程序对象的指针的指针的指针。

返回值

S_OK

调用成功,并返回了预期的值。

MAPI_E_VERSION

MAPI 使用的 SPI 版本与此提供程序使用的 SPI 不兼容。

备注

MAPI 调用入口点函数 MSProviderInit 以在客户端登录后初始化消息存储提供程序。

针对实现者的说明

消息存储提供程序必须将 MSProviderInit 实现为提供程序 DLL 中的入口点函数。 实现必须基于 MSPROVIDERINIT 函数原型,这也是在 MAPISPI.H 中指定的。 MAPI 定义 MSPROVIDERINIT 以使用标准 MAPI 初始化调用类型 STDMAPIINITCALLTYPE,这会导致 MSProviderInit 遵循 CDECL 调用约定。 CDECL 的一个优点是,即使调用参数的数量与定义的参数数不匹配,也可以尝试调用。

由于在同时使用的多个配置文件中出现或在同一配置文件中多次出现,提供程序可以多次初始化。 由于提供程序对象包含上下文,因此对于每个初始化, MSProviderInit 必须在 lppMSProvider 中返回不同的提供程序对象,即使对于同一进程中的多个初始化也是如此。

提供程序 DLL 不应与 Mapix.dll 链接。 相反,它应使用这些指针进行内存分配或解除分配。

消息存储提供程序应使用 lpAllocateBufferlpAllocateMorelpFreeBuffer 指向的函数进行大多数内存分配和解除分配。 具体而言,在调用对象接口(例如 IMAPIProp::GetProps 和 IMAPITable::QueryRows)时,提供程序必须使用这些函数来分配供客户端应用程序使用的内存。 如果提供程序还希望使用 OLE 内存分配器,则应调用 lpMalloc 参数指向的分配器对象的 IUnknown::AddRef 方法。

有关编写 MSProviderInit 的详细信息,请参阅 加载消息存储提供程序。 有关入口点函数的详细信息,请参阅 实现服务提供程序入口点函数

另请参阅

ABProviderInit
IMSProvider : IUnknown
XPProviderInit