type_UserSize函数

<type>_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] 类型定义中指定的 userm 类型。 此类型可能不可传输,甚至(与 [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 = Little-endian
19-16 字符表示形式 0 = ASCII 1 = EBCDIC
15-0 封送上下文标志 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

通过封送上下文标志,可以根据 RPC 调用的上下文更改例程的行为。 例如,如果你有一个句柄 () 到数据块,则可以为进程内调用发送句柄,但将调用的实际数据发送到其他计算机。 封送上下文标志及其值在平台软件开发工具包的 Wtypes.h 和 Wtypes.idl 文件中定义, (SDK) 。

注意

正确定义线路类型后,无需使用 NDR 格式标志,因为 NDR 引擎执行必要的转换。

 

StartingSize 参数是当前缓冲区偏移量。 起始大小指示用户对象的缓冲区偏移量,它可能正确对齐,也可能不一致。 例程应考虑到任何必要的填充。

pMyObj 参数是指向用户类型对象的指针。

返回值是新的偏移量或缓冲区位置。 函数应返回累积大小,即起始大小加上可能的填充以及数据大小。

<type>_UserSize 函数可以返回所需大小的高估值。 发送缓冲区的实际大小由数据大小(而不是缓冲区分配大小)定义。

如果在编译时可以计算线路大小,则不会调用 type>_UserSize 函数。< 请注意,对于大多数联合,即使没有指针,也只能在运行时确定线路表示形式的实际大小。

user_marshal和wire_marshal的封送规则

user_marshal

wire_marshal