共用方式為


CoInitializeEx 函式 (combaseapi.h)

初始化 COM 連結庫以供呼叫線程使用、設定線程的並行模型,並視需要建立線程的新 Apartment。

如果您想要使用 Windows 運行時間 API,或想要同時使用 COM 和 Windows 執行時間元件,您應該呼叫 Windows::Foundation::Initialize 來初始化線程,而不是 CoInitializeEx。 Windows::Foundation::Initialize 足以用於 COM元件。

語法

HRESULT CoInitializeEx(
  [in, optional] LPVOID pvReserved,
  [in]           DWORD  dwCoInit
);

參數

[in, optional] pvReserved

此參數是保留的,而且必須 NULL

[in] dwCoInit

線程的並行模型和初始化選項。 此參數的值取自 COINIT 列舉。 您可以使用來自 COINIT 的任何值組合,但無法同時設定COINIT_APARTMENTTHREADED和COINIT_MULTITHREADED旗標。 預設值為 COINIT_MULTITHREADED。

傳回值

此函式可以傳回標準傳回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及下列值。

傳回碼 描述
S_OK
COM 連結庫在此線程上已成功初始化。
S_FALSE
COM 連結庫已在此線程上初始化。
RPC_E_CHANGED_MODE
先前呼叫 CoInitializeEx 為此線程指定了不相容的並行模型。 這也可能表示已從中性線程 Apartment 變更為單個線程 Apartment。

言論

CoInitializeEx 至少必須呼叫一次,而且通常只針對使用 COM 連結庫的每個線程呼叫一次。 只要相同線程傳遞相同的並行旗標,就允許多個呼叫 CoInitializeEx,但後續的有效呼叫會傳回S_FALSE。 如果並行旗標不相符,則呼叫會失敗並傳回RPC_E_CHANGED_MODE。 (為了此規則的目的,呼叫 CoInitialize 相當於使用 COINIT_APARTMENTTHREADED 旗標呼叫 coInitializeEx。若要在線程上正常初始化 COM 連結庫,每個成功呼叫 CoInitializeCoInitializeEx,包括傳回S_FALSE的任何呼叫,都必須透過對應呼叫 來平衡 CoUninitialize。 在線程上取消初始化 COM 之後,您就可以在任何模式中重新初始化它,但受限於上述條件約束。

您必須先在線程上初始化 COM 連結庫,才能呼叫除了 CoGetMalloc以外的任何連結庫函式,以取得標準配置器的指標,以及記憶體配置函式。 否則,COM 函式會傳回CO_E_NOTINITIALIZED。

在單個線程 Apartment (STA) 中建立的物件只會從 Apartment 的線程接收方法呼叫,因此呼叫會串行化並只抵達消息佇列界限(呼叫 PeekMessageSendMessage 函式時)。

在多線程 Apartment (MTA) 的 COM 線程上建立的對象必須能夠隨時接收來自其他線程的方法呼叫。 您通常會使用重要區段、號誌或 Mutex 等同步處理基本類型,在多線程物件的程式代碼中實作某種形式的並行控制,以協助保護對象的數據。

當設定為在中性線程 Apartment (NTA) 中執行的物件是由 STA 或 MTA 中的線程呼叫時,該線程會傳輸到 NTA。 如果這個線程後續呼叫 CoInitializeEx,則呼叫會失敗並傳回RPC_E_CHANGED_MODE。

由於 OLE 技術不是安全線程,因此 OleInitialize 函式會使用 COINIT_APARTMENTTHREADED 旗標 CoInitializeEx 呼叫。 因此,針對多線程物件並行初始化的 Apartment 無法使用 OleInitialize所啟用的功能。

由於無法控制載入或卸除同進程伺服器的順序,因此請勿 DllMain 函式呼叫 coInitializeCoInitializeEx,或從 DllMain 函式 CoUninitialize。

要求

要求 價值
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 combaseapi.h (include Objbase.h)
連結庫 Ole32.lib
DLL Ole32.dll

另請參閱

進程、線程和 Apartment