跨 Apartment 存取介面

COM 提供一種方式,讓進程中的任何 Apartment 存取進程中任何其他 Apartment 中對象上實作的介面。 這是透過 IGlobalInterfaceTable 介面來完成。 此介面有三種方法,可讓您執行下列動作:

  • 將介面註冊為 全域 (processwide) 介面。
  • 透過 Cookie 從任何其他 Apartment 取得該介面的指標。
  • 撤銷介面的全域註冊。

IGlobalInterfaceTable 介面是一種有效率的方式,可讓進程將介面指標儲存在記憶體位置,以便從進程內的多個 Apartment 存取,例如全進程變數和敏捷式物件(自由線程、封送處理物件),其中包含其他物件的介面指標。

敏捷式物件不知道其執行所在的基礎 COM 基礎結構;換句話說,它正在執行哪個 Apartment、內容和線程。 物件可能會持有Apartment或內容專屬的介面。 基於這個理由,從任何敏捷式元件執行的位置呼叫這些介面可能不一定都能正常運作。 全域介面數據表會根據敏捷式物件執行的位置,確保使用物件的有效 Proxy(或直接指標)來避免這個問題。

注意

全域介面數據表無法跨進程或機器界限移植,因此無法取代一般參數傳遞機制。

 

如需建立和使用全域介面數據表的相關信息,請參閱下列主題:

選擇線程模型

多線程公寓

進程伺服器線程問題

進程、線程和 Apartment

單個線程和多線程通訊

單個線程 Apartment