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 引擎稍後引發緩衝區溢位例外狀況。
例外狀況必須在本機攔截並處理,不允許例外狀況來傳播呼叫堆棧。
相關主題