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