在微軟的COM(組件對象模型)中,列集是將參數打包與解包,使得遠程過程(remote procedure)可以進行的過程。[2] 當接口指針要跨越COM單元(apartment)邊界(也就是在COM庫的實例之間跨越)時,必須要對其進行列集操作。[1]
不同的參數以不同的方式進行列集。例如列集一個整形參數只需要簡單地將這個值複製到訊息快取中(即便是這么一個簡單的例子,也可能存在著跨計算機時需要處理的位元組順序)。列集一個數組是一個更複雜的過程。數組成員被以特定的順序複製,從而使另一端可以精確地重構數組。[2]
對於標準的列集方法(standard marshaling),代理對象(proxy)和存根代碼(stub)對於接口來說都是系統寬度(systemwide)的資源,並且它們使用遵循標準協定的通告進行互動與通信。
除了標準列集法還有另一個選擇,那就是自定義的列集方法(custom marshaling)。對於任何一個給定的接口,對象可以選擇COM提供的標準列集法或者是自定義列集法。一旦為給定的接口做出選擇,這種選擇將在一個對象的生命周期里一直保持不變。
組件之間的通信
列集用於組件的通信中。如右圖所示,在進程邊界的客戶端一側,客戶端的方法調用到達代理然後進入屬於COM庫的一部分的通道(channel)。通道將包含有列集過的參數的快取傳送到RPC運行時庫,RPC運行時庫隨後會將這些信息傳遞到進程邊界的另一側。
基本介紹
- 中文名:列集
- 外文名:Marshal