MAPIInitialize

适用于:Outlook 2013 | Outlook 2016

递增 MAPI 子系统引用计数并初始化 MAPI DLL 的全局数据。

属性
标头文件:
Mapix.h
实现者:
MAPI
调用者:
客户端应用程序
HRESULT MAPIInitialize(
  LPVOID lpMapiInit
);

参数

lpMapiInit

[in]指向 MAPIINIT_0 结构的指针。 lpMapiInit 参数可设置为 NULL。

返回值

S_OK

MAPI 子系统已成功初始化。

备注

MAPIInitialize 函数递增 MAPI 子系统的 MAPI 引用计数,MAPIUninitialize 函数递减内部引用计数。 因此,对一个函数的调用数必须等于对另一个函数的调用数。 如果 MAPI 之前尚未初始化,则 MAPIInitialize 返回S_OK。

在进行任何其他 MAPI 调用之前,客户端或服务提供程序必须调用 MAPIInitialize 。 否则会导致客户端或服务提供商调用返回MAPI_E_NOT_INITIALIZED值。

从多线程应用程序调用 MAPIInitialize 时,请将 lpMapiInit 参数设置为 声明如下的 MAPIINIT_0 结构:

MAPIINIT_0 MAPIINIT= { 0, MAPI_MULTITHREAD_NOTIFICATIONS}

并调用:

MAPIInitialize (&MAPIINIT) ;

声明此结构时,MAPI 会创建一个单独的线程来处理通知窗口,该窗口会一直持续到初始化引用计数降至零。 Windows 服务必须将 lpMapiInit 指向的 MAPIINIT_0 结构的 ulflags 成员设置为MAPI_NT_SERVICE。

注意

不能从 Win32 DllMain 函数或创建或终止线程的任何其他函数中调用 MAPIInitializeMAPIUninitialize。 有关详细信息,请参阅 使用 Thread-Safe 对象

MAPIInitialize 不返回任何扩展的错误信息。 与大多数其他 MAPI 调用不同,其返回值的含义严格定义为与初始化失败的特定步骤相对应:

  1. 检查参数和标志。

    MAPI_E_INVALID_PARAMETER或MAPI_E_UNKNOWN_FLAGS。 调用方传递的参数或标志无效。

  2. 初始化 MAPI 所需的注册表项,并确认操作系统的类型。 仅当客户端进程在 Windows 下作为服务运行,并在 MAPIINIT_0 结构中设置 MAPI_NT SERVICE 标志时,才会执行此步骤。

    MAPI_E_TOO_COMPLEX。 调用进程是一个 Windows 服务,MAPI 所需的注册表项无法初始化。

    应用程序事件日志中可能提供了其他信息。

  3. 检查 MAPI 与 OLE 的兼容性,然后初始化 OLE。

  4. 检查当前版本的 OLE 和 MAPI 之间的兼容性。

    MAPI_E_VERSION。 工作站上安装的 OLE 版本与此版本的 MAPI 不兼容。

  5. 初始化 OLE。

    仅在此步骤中,此函数可以返回此处未列出的错误代码。 此处 列出的任何错误都应假定来自 OLE 函数 CoInitialize

  6. 初始化每个进程的全局变量。

    MAPI_E_SESSION_LIMIT。 MAPI 设置特定于当前进程的上下文。 如果进程数超过特定数目,则 Win16 上可能发生故障;如果可用内存耗尽,则任何系统上都可能发生故障。

  7. 初始化所有进程的共享全局变量。

    MAPI_E_NOT_ENOUGH_RESOURCES。 系统资源不足,无法完成操作。

  8. 初始化通知引擎,如果MAPI_MULTITHREAD_NOTIFICATIONS标志请求,则创建其窗口及其线程。

    MAPI_E_INVALID_OBJECT。 如果系统资源耗尽,可能会失败。

  9. 加载并初始化配置文件提供程序。 验证 MAPIInitialize 是否可以访问存储配置文件数据的注册表项。

    MAPI_E_NOT_INITIALIZED。 配置文件提供程序遇到错误。

MFCMAPI 引用

有关 MFCMAPI 示例代码,请参阅下表。

文件 函数 Comment
ContentsTableListCtrl.cpp
MFCMAPI 使用 MAPIInitialize 方法在后台线程上初始化 MAPI 以执行某些表处理。

另请参阅

MFCMAPI 代码示例