COM 連結庫

任何使用 COM 的程式都必須初始化和取消初始化 COM 連結庫。 除了是規格之外,COM也會在此連結庫中實作一些重要的服務。 COM 連結庫提供為 Microsoft Windows 中的一組 DLL 和 EXE(主要是Ole32.dll和Rpcss.exe),COM 連結庫包含下列專案:

  • 少數基本功能可協助建立用戶端和伺服器 COM 應用程式。 針對用戶端,COM提供用來建立物件的基本函式。 針對伺服器,COM 提供公開其物件的方法。

  • 實作定位器服務會透過 COM 判斷的唯一類別識別碼 (CLSID),哪一部伺服器會實作該類別,以及該伺服器所在的位置。 此服務包含間接存取層級的支援,通常是系統登錄,在對象類別的身分識別與實作的封裝之間,讓用戶端與封裝無關,未來可能會變更。

  • 當物件在本機或遠端伺服器中執行時,會呼叫透明遠程過程。

  • 一種標準機制,可讓應用程式控制其進程內的記憶體配置方式,特別是合作對象之間需要傳遞的記憶體,以便正確釋放記憶體。

若要使用基本 COM 服務,用戶端和跨進程伺服器中執行的所有 COM 線程都必須呼叫 CoInitialize 或 CoInitializeEx 函式,才能呼叫記憶體配置呼叫以外的任何其他 COM 函式。 CoInitializeEx 會取代另一個函式,並新增參數,讓您指定線程的線程模型:Apartment 線程或自由線程。 對 CoInitialize呼叫只會將線程模型設定為 Apartment 線程。

OLE 複合檔案應用程式會呼叫 OleInitialize 函式,此函式會呼叫 CoInitializeEx,同時也會執行複合檔所需的一些初始化。 因此,呼叫 OleInitialize 的線程無法自由線程。 如需用戶端和伺服器中線程的資訊,請參閱進程、線程和 Apartment。

進程內伺服器不會呼叫初始化函式,因為它們正載入至已經執行此動作的進程。 因此,同進程伺服器必須在 InprocServer32 機碼下的登錄中設定其線程模型。 如需進程內伺服器線程問題的詳細資訊,請參閱 進程伺服器線程問題

也請務必取消初始化連結庫。 對於每個對 CoInitialize 或 CoInitializeEx 的呼叫,都必須有對應的 CoUninitialize 呼叫。 對於 OleInitialize 的每個呼叫,都必須有對應的 OleUninitialize 呼叫。

進程內伺服器可以假設他們正在載入的進程已經執行這些步驟。

元件物件模型