共用方式為


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。

用戶端或服務提供者必須先呼叫 MAPIInitialize ,才能進行任何其他MAPI呼叫。 若未這麼做,會導致用戶端或服務提供者呼叫傳回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 範例程式代碼,請參閱下表。

檔案 Function Comment
ContentsTableListCtrl.cpp
MFCMAPI 會使用 MAPIInitialize 方法在背景線程上初始化MAPI,以執行一些數據表處理。

另請參閱

MFCMAPI 作為程式碼範例