type_UserMarshal 函数
<type>_UserMarshal 函数是 [ wire_marshal] 和 [ user_marshal] 属性的帮助程序函数。 存根调用此函数以封送客户端或服务器端上的数据。 函数定义为:
unsigned char __RPC_FAR * __RPC_USER <type>_UserMarshal(
unsigned long __RPC_FAR * pFlags,
unsigned char __RPC_FAR * pBuffer,
<type> __RPC_FAR * pMyObj);
<函数名称中的类型>表示 [wire_marshal] 或 [user_marshal] 类型定义中指定的 userm 类型。 此类型可能是不可传输的,甚至(与 [user_marshal] 属性一起使用时)是 MIDL 编译器未知的类型。 函数原型中不使用可传输类型名称 () 的线路类型名称。 但请注意,线路类型定义 OSF DCE 指定的数据的线路布局。
pFlags 参数是指向无符号长标志字段的指针。 标志的上字包含 OSF DCE 为浮点、字节顺序和字符表示形式定义的 NDR 数据表示标志。 下部单词包含 COM 通道定义的封送上下文标志。 type_UserSize 函数中介绍了字段中标志的确切布局。
pBuffer 参数是当前缓冲区指针。 此指针可能会在条目上对齐,也可能不对齐。 类型<>_UserMarshal函数应适当对齐缓冲区指针,封送数据,并返回新的缓冲区位置,这是封送对象后第一个字节的地址。 请记住,线路类型规范确定缓冲区中数据的实际布局。
pMyObj 参数是指向用户类型对象的指针。
返回值是新的缓冲区位置,该位置是未封送对象之后的第一个字节的地址。
错误地计算数据大小并尝试封送超出预期的数据时,可能会发生缓冲区溢出。 应小心避免出现这种情况。 可以使用类型_UserMarshal返回的指针<对其进行检查。> 否则,可能会让 NDR 引擎稍后引发缓冲区溢出异常。
异常必须在本地捕获和处理,不得允许异常在调用堆栈上传播。
相关主题