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 函数。< 请注意,对于大多数联合,即使没有指针,也只能在运行时确定线路表示形式的实际大小。
相关主题