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