初始化 COM 程式庫

任何使用 COM 的 Windows 程式都必須呼叫 CoInitializeEx 函 式來初始化 COM 程式庫。 每個使用 COM 介面的執行緒都必須對這個函式進行個別呼叫。 CoInitializeEx 具有下列簽章:

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

第一個參數是保留的,而且必須是 Null。 第二個參數會指定程式將使用的執行緒模型。 COM 支援兩種不同的執行緒模型: Apartment 執行緒多執行緒。 如果您指定 Apartment 執行緒,您會進行下列保證:

  • 您將從單一線程存取每個 COM 物件;您不會在多個執行緒之間共用 COM 介面指標。
  • 執行緒會有訊息迴圈。 (請參閱模組 1.) 中的視窗訊息

如果上述任一條件約束不是 true,請使用多執行緒模型。 若要指定執行緒模型,請在 dwCoInit 參數中設定下列其中一個旗標。

旗標 描述
COINIT_APARTMENTTHREADED Apartment 執行緒。
COINIT_MULTITHREADED 多執行緒。

 

您必須設定這其中一個旗標。 一般而言,建立視窗的執行緒應該使用 COINIT_APARTMENTTHREADED 旗標,而其他執行緒應該使用 COINIT_MULTITHREADED。 不過,某些 COM 元件需要特定的執行緒模型。 MSDN 檔應該會告訴您該情況的時機。

注意

實際上,即使您指定 Apartment 執行緒,仍可使用稱為封 送處理的技術,線上程之間共用介面。 封送處理超出此課程模組的範圍。 重點是,使用 Apartment 執行緒時,您絕對不能直接將介面指標複製到另一個執行緒。 如需 COM 執行緒模型的詳細資訊,請參閱進程、執行緒和 Apartment。

 

除了已提及的旗標之外,最好在dwCoInit參數中設定COINIT_DISABLE_OLE1DDE旗標。 設定此旗標可避免與物件連結和內嵌 (OLE) 1.0 相關的額外負荷,這是過時的技術。

以下是初始化 APARTMENT 執行緒 COM 的方式:

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

HRESULT傳回類型包含錯誤或成功碼。 我們將在下一節中查看 COM 錯誤處理。

取消初始化 COM 程式庫

對於每次成功呼叫 CoInitializeEx,您必須先呼叫 CoUninitialize ,執行緒才會結束。 此函式不採用任何參數,而且沒有傳回值。

CoUninitialize();

下一個

COM 中的錯誤碼