Representación de datos
Los entornos informáticos pueden diferir significativamente, al igual que las arquitecturas de red. Para dar cabida a estas diferencias, MIDL le permite modificar la forma en que representa los datos. A veces, puede simplificar el desarrollo mediante la conversión de datos en un formato que la aplicación pueda controlar más fácilmente. Puede modificar el formato de datos de la aplicación para que se pueda transmitir de forma más eficaz a través de la red.
Los atributos [transmit_as] y [represent_as] indican al compilador que asocie un tipo transmisible que el código auxiliar pasa entre el cliente y el servidor, con un tipo de usuario que usan las aplicaciones cliente y servidor. Debe proporcionar las rutinas que llevan a cabo la conversión entre el tipo de usuario y el tipo transmisible, y las rutinas para liberar la memoria que se usó para contener los datos convertidos. El uso del atributo IDL [transmit_as] o el atributo ACF [represent_as] indica al código auxiliar que llame a estas rutinas de conversión antes y después de la transmisión. El atributo [transmit_as] permite convertir un tipo de datos a otro tipo de datos para la transmisión a través de la red. El atributo [represent_as] permite controlar la forma en que se presentan los datos de la red a la aplicación.
Los atributos [wire_marshal] y [user_marshal] son extensiones de Microsoft para el IDL de OSF-DCE. Su sintaxis y funcionalidad son similares a las de los atributos [transmit_as] y [represent_as] especificados por DCE, respectivamente. La diferencia es que, en lugar de convertir los datos de un tipo a otro, serializa los datos directamente. Para ello, debe proporcionar las rutinas externas para cambiar el tamaño del búfer de datos en los lados del cliente y del servidor, serializar y desacoplar los datos en los lados del cliente y del servidor, y liberar los datos en el lado servidor. El compilador MIDL genera códigos de formato que indican al motor NDR que llame a estas rutinas externas cuando sea necesario.
Los atributos [wire_marshal] y [user_marshal] permiten serializar tipos de datos que, de lo contrario, no se pudieron transmitir a través de los límites del proceso. Además, dado que hay menos sobrecarga asociada a la conversión de tipos, [wire_marshal] y [user_marshal] proporcionan un rendimiento mejorado en tiempo de ejecución, en comparación con [transmit_as] y [represent_as]. Los atributos [wire_marshal] y [user_marshal] se excluyen mutuamente entre sí y con respecto a los atributos [transmit_as] y [represent_as] para un tipo determinado.
Es importante tener en cuenta que la implementación de los atributos [wire_marshal] y [user_marshal] deben seguir las reglas de serialización que dicta la especificación OSF-DCE. Por ese motivo, no se recomienda el uso de estos atributos si no está familiarizado con el protocolo de conexión. Puede encontrar más información sobre la transferencia de sintaxis NDR en www.opengroup.org.
En esta sección se proporciona una breve introducción a estos atributos de MIDL, en los temas siguientes: