共用方式為


初始化 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 元件需要特定的線程模型。

注意

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

 

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

以下是您將 COM 初始化 Apartment 線程的方式:

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

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

取消初始化 COM 連結庫

對於每個成功呼叫 CoInitializeEx,您必須在線程結束之前呼叫 CoUninitialize 此函式不接受任何參數,而且沒有傳回值。

CoUninitialize();

下一步

COM 中的錯誤碼