type_UserSize函式

類型 <> _UserSize函式是 [ wire_marshal] 和 [ user_marshal] 屬性的協助程式函式。 存根會呼叫此函式,以在用戶端或伺服器端封送處理資料之前,為使用者資料物件調整 RPC 資料緩衝區的大小。 函式定義為:

unsigned long __RPC_USER  <type>_UserSize(
    unsigned long __RPC_FAR * pFlags,
    unsigned long StartingSize,
    <type>  __RPC_FAR *pMyObj);

函 < 式名稱中的類型 > 表示 userm-type,如 [wire_marshal][user_marshal] 類型定義中所指定。 當與 [user_marshal] 屬性搭配使用時,此類型可能是無法轉譯的,甚至是 MIDL 編譯器未知的。 線路類型名稱 (函式原型不會使用透過網路傳輸的類型名稱) 。 不過,請注意,線路類型會定義 OSF DCE 所指定資料的版面配置。 所有資料都必須轉換成網路資料標記法, (NDR) 格式。

pFlags參數是未帶正負號長旗標欄位的指標。 旗標的上字包含 OSF DCE 所定義的 NDR 格式旗標,用於浮點、位元組順序和字元表示。 下一個字包含 COM 通道所定義的封送處理內容旗標。 下表顯示欄位內旗標的確切配置。

Bits 旗標
31-24 浮點標記法 0 = IEEE 1 = VAX 2 = Cray 3 = IBM
23-20 整數和浮點位元組順序 0 = Big-endian 1 = Small-endian
19-16 字元表示 0 = ASCII 1 = EBCDIC
15-0 封送處理內容旗標 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

封送處理內容旗標可讓您根據 RPC 呼叫的內容來改變常式的行為。 例如,如果您有一個控制碼 () 到資料區塊,您可以傳送進程內呼叫的控制碼,但您會將呼叫的實際資料傳送至不同的電腦。 封送處理內容旗標及其值定義在 Platform Software Development Kit (SDK) 的 Wtypes.h 和 Wtypes.idl 檔案中。

注意

正確定義線路類型時,您不需要使用 NDR 格式旗標,因為 NDR 引擎會執行必要的轉換。

 

StartingSize參數是目前的緩衝區位移。 起始大小表示使用者物件的緩衝區位移,而且可能或可能無法正確對齊。 您的常式應該考慮任何必要填補。

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

傳回值是新的位移或緩衝區位置。 函式應該會傳回累計大小,也就是起始大小加上可能的填補加上資料大小。

類型 <> _UserSize函式可以傳回所需大小的超額。 傳送緩衝區的實際大小是由資料大小所定義,而不是由緩衝區配置大小所定義。

如果可以在編譯時間計算線路大小,則不會呼叫 type > _UserSize 函式。 < 請注意,對於大多數等位而言,即使沒有指標,仍只能在執行時間判斷線表示的實際大小。

封送處理user_marshal和wire_marshal規則

user_marshal

wire_marshal