共用方式為


取得物件的指標

因為 COM 沒有嚴格的類別模型,用戶端可以具現化或取得物件上介面的指標有四種方式:

  • 呼叫 COM 連結庫函式,以建立預先決定類型的物件;也就是說,函式只會針對特定物件類別傳回一個特定介面的指標。
  • 呼叫 COM 連結庫函式,此函式可以根據類別識別碼 (CLSID) 建立物件,並傳回所要求的任何類型的介面指標。
  • 呼叫某些介面的方法,該介面會建立另一個物件(或連接到現有的物件),並傳回該個別對象的介面指標。
  • 使用 介面實作 物件,讓其他物件直接將其介面指標傳遞至用戶端。

如需在您擁有第一個介面之後取得物件上其他介面指標的相關信息,請參閱 QueryInterface:在物件中巡覽。

建立預先決定類型的物件

有許多 COM 函式,例如 CoGetMalloc,可傳回特定介面實作的指標。 (CoGetMalloc 會擷取標準 COM 記憶體配置器的指標。其中大部分是協助程式函式,而大部分的函式會在本文件的參考章節中說明,這些函式會根據它們相關的特定區域,例如記憶體或數據傳輸。

根據 CLSID 建立物件

有數個函式,假設有CLSID,用戶端可以呼叫 來建立物件實例並取得其指標。 所有這些函式都是以 CoGetClassObject 函式為基礎,該函式會建立類別物件,並提供介面的指標,讓您建立該類別的實例。 雖然必須有資訊指出伺服器所在的系統,但用戶端不需要包含該資訊。 用戶端只需要知道 CLSID,而且永遠不需要伺服器程式代碼的絕對路徑。 如需詳細資訊,請參閱 透過類別物件建立物件

傳回個別物件的指標

在傳回個別物件的指標的許多介面方法中,有數個方法會建立並傳回列舉值物件的指標,這可讓您判斷物件所維護的指定類型項目數目。 COM 會定義列舉各種專案的介面,例如字串、重要結構、Monikers 和 IUnknown 介面指標。 建立列舉值實例並取得其介面指標的一般方式,就是從另一個介面呼叫方法。 例如,IDataObject 介面會定義兩個方法 EnumDAdvise EnumFormatEtc,以傳回兩個不同列舉物件上介面的指標。 COM 中有許多方法會傳回物件的指標,例如 OLE 複合檔介面 IOleObject::GetClientSite,在內嵌或鏈接物件上呼叫時,會傳回容器物件之 IOleClientSite 實作的指標。

實作物件,以將介面指標直接傳遞至用戶端

當兩個物件,例如 OLE 複合檔容器和伺服器,需要雙向通訊時,每個對象都會實作一個包含介面方法的物件,其可透過該物件將介面指標傳遞至另一個物件。 實作物件也是所建立物件的客戶端,接著可以呼叫 方法並取得傳遞的指標。

COM 用戶端和伺服器

COM 伺服器責任