Atributo wire_marshal

El atributo [ wire_marshal] es un atributo de tipo IDL similar en sintaxis a [ transmit_as], pero proporciona una manera más eficaz de serializar los datos a través de una red.

Use el atributo [wire_marshal] para especificar un tipo de datos que se transmitirá en lugar del tipo de datos específico de la aplicación. Cada tipo específico de la aplicación tiene un tipo transmitible correspondiente que define la representación de cable (la representación usada en la red). No es necesario transmitir el tipo específico de la aplicación, pero debe ser un tipo que MIDL reconozca. Para serializar un tipo desconocido para MIDL, use el atributo ACF [ user_marshal].

El tipo específico de la aplicación puede ser un tipo simple, compuesto o de puntero. La restricción principal es que la instancia de tipo debe tener un tamaño de memoria fijo y bien definido. Si el tamaño de la instancia de tipo debe cambiar, use un campo de puntero en lugar de una matriz conforme. Como alternativa, puede definir un puntero al tipo modificable.

Debe proporcionar las rutinas para cambiar el tamaño, serializar y desacoplar los datos, así como liberar la memoria asociada. En la tabla siguiente se describen los cuatro nombres de rutina proporcionados por el usuario. El <tipo> es el tipo userm especificado en la definición de tipo [wire_marshal].

Rutina Descripción
<type>_UserSize Cambia el tamaño del búfer de datos RPC antes de serializar en el lado cliente o servidor.
<type>_UserMarshal Calcula las referencias de los datos en el lado cliente o servidor.
<type>_UserUnmarshal Desenlaza los datos en el lado cliente o servidor.
<type>_UserFree Libera los datos en el lado servidor.

 

Estas rutinas proporcionadas por el programador las proporciona el cliente o la aplicación de servidor en función de los atributos direccionales.

Si el parámetro es [ in] solo, el cliente transmite al servidor. El cliente necesita las <funciones type>_UserSize y <type>_UserMarshal . El servidor necesita las <funciones type>_UserUnmarshal y <type>_UserFree .

Para un parámetro [ out]-only, el servidor transmite al cliente. El servidor necesita las <funciones type>_UserSize y <type>_UserMarshal , mientras que el cliente necesita la <función type>_UserMarshal .

Atributo user_marshal

Serialización de reglas para user_marshal y wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo