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 .
Temas relacionados