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 函式。 請注意,對於大多數等位而言,即使沒有指標,線表示的實際大小只能在運行時間決定。
相關主題