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