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 函数或创建或终止线程的任何其他函数中调用 MAPIInitialize 或 MAPIUninitialize。 有关详细信息,请参阅 使用 Thread-Safe 对象。
MAPIInitialize 不返回任何扩展的错误信息。 与大多数其他 MAPI 调用不同,其返回值的含义严格定义为与初始化失败的特定步骤相对应:
检查参数和标志。
MAPI_E_INVALID_PARAMETER或MAPI_E_UNKNOWN_FLAGS。 调用方传递的参数或标志无效。
初始化 MAPI 所需的注册表项,并确认操作系统的类型。 仅当客户端进程在 Windows 下作为服务运行,并在 MAPIINIT_0 结构中设置 MAPI_NT SERVICE 标志时,才会执行此步骤。
MAPI_E_TOO_COMPLEX。 调用进程是一个 Windows 服务,MAPI 所需的注册表项无法初始化。
应用程序事件日志中可能提供了其他信息。
检查 MAPI 与 OLE 的兼容性,然后初始化 OLE。
检查当前版本的 OLE 和 MAPI 之间的兼容性。
MAPI_E_VERSION。 工作站上安装的 OLE 版本与此版本的 MAPI 不兼容。
初始化 OLE。
仅在此步骤中,此函数可以返回此处未列出的错误代码。 此处 未 列出的任何错误都应假定来自 OLE 函数 CoInitialize。
初始化每个进程的全局变量。
MAPI_E_SESSION_LIMIT。 MAPI 设置特定于当前进程的上下文。 如果进程数超过特定数目,则 Win16 上可能发生故障;如果可用内存耗尽,则任何系统上都可能发生故障。
初始化所有进程的共享全局变量。
MAPI_E_NOT_ENOUGH_RESOURCES。 系统资源不足,无法完成操作。
初始化通知引擎,如果MAPI_MULTITHREAD_NOTIFICATIONS标志请求,则创建其窗口及其线程。
MAPI_E_INVALID_OBJECT。 如果系统资源耗尽,可能会失败。
加载并初始化配置文件提供程序。 验证 MAPIInitialize 是否可以访问存储配置文件数据的注册表项。
MAPI_E_NOT_INITIALIZED。 配置文件提供程序遇到错误。
MFCMAPI 引用
有关 MFCMAPI 示例代码,请参阅下表。
文件 | 函数 | Comment |
---|---|---|
ContentsTableListCtrl.cpp |
MFCMAPI 使用 MAPIInitialize 方法在后台线程上初始化 MAPI 以执行某些表处理。 |