CoInitialize 函式 (objbase.h)

初始化目前線程上的 COM 程式庫,並將並行模型識別為單一線程 Apartment (STA) 。

新的應用程式應該呼叫 CoInitializeEx ,而不是 CoInitialize。

如果您想要使用 Windows 執行階段,您必須改為呼叫RoInitializeWindows::Foundation::Initialize

語法

HRESULT CoInitialize(
  [in, optional] LPVOID pvReserved
);

參數

[in, optional] pvReserved

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

傳回值

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

傳回碼 描述
S_OK
COM 程式庫已在此執行緒上成功初始化。
S_FALSE
COM 程式庫已在此執行緒上初始化。
RPC_E_CHANGED_MODE
對 CoInitializeEx的先前呼叫會將此執行緒的並行模型指定為多執行緒 Apartment (MTA) 。 這也表示已從中性執行緒 Apartment 變更為單一執行緒 Apartment。

備註

您需要先線上程上初始化 COM 程式庫,再呼叫 CoGetMalloc以外的任何程式庫函式,以取得標準配置器的指標,以及記憶體配置函式。

設定執行緒的並行模型之後,就無法變更。 在先前初始化為多執行緒的 Apartment 上呼叫 CoInitialize 將會失敗,並傳回RPC_E_CHANGED_MODE。

CoInitializeEx 提供與 CoInitialize 相同的功能,也提供參數來明確指定執行緒的並行模型。 CoInitialize 會呼叫 CoInitializeEx ,並將並行模型指定為單一線程 Apartment。 現今開發的應用程式應該呼叫 CoInitializeEx ,而不是 CoInitialize

一般而言,COM 程式庫只會線上程上初始化一次。 只要它們未嘗試變更並行模型,但會傳回S_FALSE,同一個執行緒上對 CoInitializeCoInitializeEx 的後續呼叫將會成功。 若要正常關閉 COM 程式庫,每個成功呼叫 CoInitializeCoInitializeEx,包括傳回S_FALSE的專案,都必須由對 CoUninitialize的對應呼叫進行平衡。 不過,使用 0 (呼叫 CoInitialize 或具有 COINIT_APARTMENTTHREADED) 的 CoInitializeEx 的應用程式的第一個執行緒必須是最後一個執行緒,才能呼叫 CoUninitialize。 否則,在 STA 上對 CoInitialize 的後續呼叫將會失敗,而且應用程式將無法運作。

因為無法控制載入或卸載同進程伺服器的順序,所以請勿從DllMain函式呼叫CoInitializeCoInitializeExCoUninitialize

需求

   
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 objbase.h
程式庫 Ole32.lib
Dll Ole32.dll
API 集合 ext-ms-win-com-sta-l1-1-0 (于 Windows 10 10.0.20166 版)

另請參閱

CoInitializeEx