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