wire_marshal 属性

[ wire_marshal] 属性是一个 IDL 类型的属性,其语法与 [ transmit_as] 类似,但提供了一种更高效的方式来跨网络封送数据。

使用 [wire_marshal] 属性可以指定将传输的数据类型来代替特定于应用程序的数据类型。 每个特定于应用程序的类型都有相应的可传输类型,该类型定义网络表示形式 (网络) 上使用的表示形式。应用程序特定的类型不需要可传输,但它必须是 MIDL 识别的类型。 若要封送 MIDL 未知的类型,请使用 ACF 属性 [ user_marshal]。

特定于应用程序的类型可以是简单类型、复合类型或指针类型。 main限制是类型实例必须具有固定且妥善定义的内存大小。 如果需要更改类型实例的大小,请使用指针字段而不是一致的数组。 或者,可以定义指向可更改类型的指针。

必须提供用于调整大小、封送和取消封送数据的例程,以及释放关联的内存。 下表描述了四个用户提供的例程名称。 类型<>是在 [wire_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 函数。

user_marshal 属性

user_marshal和wire_marshal封送规则

wire_marshal

user_marshal

NdrGetUserMarshalInfo