共用方式為


跨 Apartment 存取介面

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

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

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

敏捷式物件不知道其執行所在的底層 COM 基礎結構;換句話說,它不知道正在執行於哪個 apartment、上下文和執行緒。 物件可能包含對於特定公寓或情境的介面。 基於這個理由,從任何敏捷式元件執行的位置呼叫這些介面可能不一定都能正常運作。 全域介面數據表會根據敏捷式物件執行的位置,確保使用物件的有效 Proxy(或直接指標)來避免這個問題。

注意

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

 

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

選擇線程模型

多線程公寓

In-Process 伺服器線程問題

進程、線程和單元

Single-Threaded 和多線程通訊

Single-Threaded 公寓