XPProviderInit

适用于:Outlook 2013 | Outlook 2016

初始化操作的传输提供程序。

属性
标头文件:
Mapispi.h
实现者:
传输提供程序
调用者:
MAPI
HRESULT XPProviderInit(
  HINSTANCE hInstance,
  LPMALLOC lpMalloc,
  LPALLOCATEBUFFER lpAllocateBuffer,
  LPALLOCATEMORE lpAllocateMore,
  LPFREEBUFFER lpFreeBuffer,
  ULONG ulFlags,
  ULONG ulMAPIVer,
  ULONG FAR * lpulProviderVer,
  LPXPPROVIDER FAR * lppXPProvider
);

参数

hInstance

[in]传输提供程序的动态链接库实例 (DLL) MAPI 在加载 DLL 时使用。

lpMalloc

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

lpAllocateBuffer

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

lpAllocateMore

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

lpFreeBuffer

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

ulFlags

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

MAPI_NT_SERVICE

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

ulMAPIVer

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

lpulProviderVer

[out]指向此传输提供程序使用的 SPI 版本号的指针。

lppXPProvider

[out]指向已初始化传输提供程序对象的指针的指针。

返回值

S_OK

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

MAPI_E_VERSION

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

备注

MAPI 调用入口点函数 XPProviderInit 以在客户端登录后初始化传输提供程序。 对于客户端配置文件中指定的每个传输提供程序,将调用 XPProviderInit 一次。

针对实现者的说明

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

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

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

有关编写 XPProviderInit 的详细信息,请参阅 初始化传输提供程序。 有关入口点函数的详细信息,请参阅 实现服务提供程序入口点函数

另请参阅

ABProviderInit
IXPProvider : IUnknown
MSProviderInit