共用方式為


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);

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

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

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

 

封送處理內容旗標可讓您根據 RPC 呼叫的內容來改變例程的行為。 例如,如果您有句柄()到數據區塊,您可以傳送進程內呼叫的句柄,但您會將呼叫的實際數據傳送至不同的計算機。 封送處理內容旗標及其值定義於平台軟體開發工具包 (SDK) 中的 Wtypes.h 和 Wtypes.idl 檔案中。

注意

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

 

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

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

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

<類型>_UserSize 函式可以傳回所需大小的高估。 傳送緩衝區的實際大小是由數據大小定義,而不是由緩衝區配置大小來定義。

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

封送處理user_marshal和wire_marshal规则

user_marshal

wire_marshal