ABProviderInit

适用于:Outlook 2013 | Outlook 2016

初始化用于操作的通讯簿提供程序。

属性
标头文件:
Mapispi.h
实现者:
通讯簿提供程序
调用者:
MAPI
HRESULT ABProviderInit(
  HINSTANCE hInstance,
  LPMALLOC lpMalloc,
  LPALLOCATEBUFFER lpAllocateBuffer,
  LPALLOCATEMORE lpAllocateMore,
  LPFREEBUFFER lpFreeBuffer,
  ULONG ulFlags,
  ULONG ulMAPIVer,
  ULONG FAR * lpulProviderVer,
  LPABPROVIDER FAR * lppABProvider
);

参数

hInstance

[in]通讯簿提供程序的动态链接库实例 (DLL) MAPI 链接时使用。

lpMalloc

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

lpAllocateBuffer

[in]指向 MAPIAllocateBuffer 函数的指针,MAPI 在分配内存所需的位置使用。

lpAllocateMore

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

lpFreeBuffer

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

ulFlags

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

MAPI_NT_SERVICE

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

ulMAPIVer

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

lpulProviderVer

[out]指向此通讯簿提供程序使用的 SPI 版本号的指针。

lppABProvider

[out]指向指向已初始化通讯簿提供程序对象的指针的指针的指针。

返回值

S_OK

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

MAPI_E_VERSION

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

备注

MAPI 调用入口点函数 ABProviderInit 以在客户端登录后初始化通讯簿提供程序。

针对实现者的说明

通讯簿提供程序必须将 ABProviderInit 实现为提供程序 DLL 中的入口点函数。 实现必须基于 ABPROVIDERINIT 函数原型,这也是在 MAPISPI.H 中指定的。 MAPI 定义 ABPROVIDERINIT 以使用标准 MAPI 初始化调用类型 STDMAPIINITCALLTYPE,这会导致 ABProviderInit 遵循 CDECL 调用约定。

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

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

有关编写 ABProviderInit 的详细信息,请参阅 实现通讯簿提供程序入口点函数。 有关入口点函数的详细信息,请参阅 实现服务提供程序入口点函数

另请参阅