type_UserMarshal函式

type <> _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] 類型定義中指定的使用者類型。 當與 [user_marshal] 屬性搭配使用時,此類型可能是無法傳輸的,甚至是 MIDL 編譯器未知的類型。 線路類型名稱 (函式原型中不會使用可轉譯類型的名稱) 。 不過請注意,線路類型會定義 OSF DCE 所指定資料的線配置。

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

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

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

傳回值是新的緩衝區位置,這是未封存物件之後第一個位元組的位址。

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

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

封送處理user_marshal和wire_marshal規則

wire_marshal

user_marshal