user_marshal屬性
[ user_marshal] 屬性是 ACF 類型屬性,語法類似於 [ represent_as]。 如同IDL屬性[ wire_marshal],它提供更有效率的方式跨網路封送處理數據。 作為 ACF 屬性,[user_marshal] 可讓您封送處理 MIDL 未知的自定義資料類型。 每個應用程式特定類型都有一個對應的可傳輸類型,可定義線表示法。
您的應用程式特定類型可以是簡單、複合或指標類型。 主要限制是類型實例必須具有固定且定義完善的記憶體大小。 如果類型實例的大小需要變更,請使用指標字段,而不是一致性陣列。 或者,您可以定義可變更類型的指標。
如同 [wire_marshal] 屬性,您會提供重設大小、封送處理、取消封送和釋放傳球的例程。 下表描述四個使用者提供的例程名稱。 <類型> 是 [user_marshal] 類型定義中指定的 userm- 類型。
常規 | 描述 |
---|---|
<類型>_UserSize | 在用戶端或伺服器端封送處理之前,請先調整 RPC 數據緩衝區的大小。 |
<類型>_UserMarshal | 封送處理客戶端或伺服器端的數據。 |
<類型>_UserUnmarshal | 取消分割客戶端或伺服器端的數據。 |
<類型>_UserFree | 釋放伺服器端的數據。 |
用戶端或伺服器應用程式會根據方向屬性提供這些使用者提供的例程。
如果參數只有 [ ] 中的 [],用戶端就會傳輸至伺服器。 用戶端需要 <類型>_UserSize 和 <類型>_UserMarshal 函式。 伺服器需要 <類型>_UserUnmarshal 和 <類型>_UserFree 函式。
針對 [out]-only 參數,伺服器會傳送至用戶端。 伺服器需要 <類型>_UserSize 和 <類型>_UserMarshal 函式,而用戶端需要 <類型>_UserMarshal 函式。
相關主題