Atributo user_marshal
El atributo [ user_marshal] es un atributo de tipo ACF similar en sintaxis a [ represent_as]. Al igual que con el atributo IDL, [ wire_marshal], ofrece una manera más eficaz de serializar los datos a través de una red. Como atributo ACF, [user_marshal] permite serializar tipos de datos personalizados desconocidos para MIDL. Cada tipo específico de la aplicación tiene un tipo transmitible correspondiente que define la representación de cable.
El tipo específico de la aplicación puede ser un tipo de puntero simple, compuesto o . 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 compatible. Como alternativa, puede definir un puntero al tipo modificable.
Al igual que con el atributo [wire_marshal], se proporcionan rutinas para el ajuste de tamaño, el cálculo de referencias, el desmarfado y los pases libres. 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 [user_marshal].
Rutina | Descripción |
---|---|
<type>_UserSize | Cambia el tamaño del búfer de datos RPC antes de calcular las referencias en el lado cliente o servidor. |
<type>_UserMarshal | Serializa los datos en el lado cliente o servidor. |
<type>_UserUnmarshal | Desmarshala los datos en el lado cliente o servidor. |
<type>_UserFree | Libera los datos en el lado servidor. |
Estas rutinas proporcionadas por el usuario se proporcionan mediante el cliente o la aplicación de servidor, en función de los atributos direccionales.
Si el parámetro es solo [ in], 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