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 函式或任何其他建立或終止線程的函式中呼叫 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 範例程式代碼,請參閱下表。
檔案 | Function | Comment |
---|---|---|
ContentsTableListCtrl.cpp |
MFCMAPI 會使用 MAPIInitialize 方法在背景線程上初始化MAPI,以執行一些數據表處理。 |