共用方式為


type_UserMarshal函式

<類型>_UserMarshal 函式是 [wire_marshal] 和 [ user_marshal] 屬性的協助程式函式。 存根會呼叫此函式,以封送處理用戶端或伺服器端的數據。 函式定義為:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

函式名稱中的 <類型> 表示 [wire_marshal][user_marshal] 類型定義中指定的 userm 類型。 此類型可能是無法傳輸的,或甚至與 [user_marshal] 屬性搭配使用時,這是 MIDL 編譯程式未知的類型。 線路類型名稱(可轉譯類型的名稱)不會用於函式原型中。 不過,請注意,線路類型會定義OSF DCE所指定數據的線路配置。

pFlags 參數是未帶正負號之長旗標欄位的指標。 旗標的上一字包含OSF DCE針對浮點、位元組順序和字元表示法所定義的NDR數據表示旗標。 下一個字包含 COM 通道所定義的封送處理內容旗標。 欄位內旗標的確切版面配置會在 Type_UserSize 函式中說明。

pBuffer 參數是目前的緩衝區指標。 此指標在專案上可能或可能不會對齊。 您的 <類型>_UserMarshal 函式應該適當地對齊緩衝區指標、封送處理數據,並傳回新的緩衝區位置,這是封送處理對象之後第一個字節的位址。 請記住,線路類型規格會決定緩衝區中數據的實際配置。

pMyObj 參數是使用者類型物件的指標。

傳回值是新的緩衝區位置,這是未封存對象之後第一個字節的位址。

當您不正確地計算數據大小,並嘗試封送處理超過預期的數據時,可能會發生緩衝區溢位。 您應該小心避免這種情況。 您可以使用 <類型>_UserMarshal 傳回的指標來檢查它。 否則,您有可能讓 NDR 引擎稍後引發緩衝區溢位例外狀況。

例外狀況必須在本機攔截並處理,不允許例外狀況來傳播呼叫堆棧。

封送處理user_marshal和wire_marshal规则

wire_marshal

user_marshal