user_marshal 属性
[ user_marshal] 属性是 ACF 类型的属性,语法类似于 [ represent_as]。 与 IDL 属性 [ wire_marshal] 一样,它提供了一种更高效的方式来跨网络封送数据。 [ user_marshal] 作为 ACF 属性,可用于封送 MIDL 未知的自定义数据类型。 每个特定于应用程序的类型都有一个相应的可传输类型,用于定义线路表示形式。
特定于应用程序的类型可以是简单类型、复合类型或指针类型。 main限制是类型实例必须具有固定且妥善定义的内存大小。 如果需要更改类型实例的大小,请使用指针字段而不是一致的数组。 或者,可以定义指向可更改类型的指针。
与 [wire_marshal] 属性一样,为大小调整、封送、取消封送和释放传递提供例程。 下表描述了四个用户提供的例程名称。 类型<>是在 [user_marshal]类型定义中指定的用户类型。
例程所返回的值 | 说明 |
---|---|
<type>_UserSize | 在客户端或服务器端封送之前调整 RPC 数据缓冲区的大小。 |
<type>_UserMarshal | 封送客户端或服务器端的数据。 |
<type>_UserUnmarshal | 取消对客户端或服务器端的数据进行封送。 |
<type>_UserFree | 释放服务器端的数据。 |
这些用户提供的例程由客户端或服务器应用程序基于方向属性提供。
如果参数仅为 [ in],则客户端将传输到服务器。 客户端需要 <type>_UserSize 和 <type>_UserMarshal 函数。 服务器需要 <type>_UserUnmarshal 和 <type>_UserFree 函数。
对于 [ out]-only 参数,服务器将传输到客户端。 服务器需要 <type>_UserSize 和 <type>_UserMarshal 函数,而客户端需要 <type>_UserMarshal 函数。
相关主题