Représentation des données
Les environnements informatiques peuvent varier considérablement, tout comme les architectures réseau. Pour tenir compte de ces différences, MIDL vous permet de modifier la façon dont vous représentez les données. Vous pouvez parfois simplifier le développement en convertissant des données dans un format que votre application peut gérer plus facilement. Vous pouvez modifier le format des données de votre application afin qu’elles puissent être transmises plus efficacement sur le réseau.
Les attributs [transmit_as] et [represent_as] indiquent au compilateur d’associer un type transmissible que le stub passe entre le client et le serveur, à un type d’utilisateur que les applications client et serveur utilisent. Vous devez fournir les routines qui effectuent la conversion entre le type utilisateur et le type transmissible, ainsi que les routines pour libérer la mémoire utilisée pour contenir les données converties. L’utilisation de l’attribut IDL [transmit_as] ou de l’attribut ACF [represent_as] indique au stub d’appeler ces routines de conversion avant et après la transmission. L’attribut [transmit_as] vous permet de convertir un type de données en un autre pour la transmission sur le réseau. L’attribut [represent_as] vous permet de contrôler la façon dont les données du réseau sont présentées à l’application.
Les attributs [wire_marshal] et [user_marshal] sont des extensions Microsoft de l’IDL OSF-DCE. Leur syntaxe et leurs fonctionnalités sont similaires à celles des attributs [transmit_as] et [represent_as] spécifiés par DCE, respectivement. La différence est que, au lieu de convertir les données d’un type à un autre, vous marshalez les données directement. Pour ce faire, vous devez fournir les routines externes pour dimensionner la mémoire tampon de données côté client et serveur, marshaler et démarshaler les données côté client et serveur, et libérer les données côté serveur. Le compilateur MIDL génère des codes de format qui indiquent au moteur NDR d’appeler ces routines externes si nécessaire.
Les attributs [wire_marshal] et [user_marshal] permettent de marshaler des types de données qui autrement ne pourraient pas être transmis au-delà des limites de processus. En outre, étant donné qu’il y a moins de surcharge associée à la conversion de type, [wire_marshal] et [user_marshal] offrent des performances améliorées au moment de l’exécution, par rapport à [transmit_as] et [represent_as] . Les attributs [wire_marshal] et [user_marshal] s’excluent mutuellement par rapport aux attributs [transmit_as] et [represent_as] d’un type donné.
Il est important de noter que l’implémentation des attributs [wire_marshal] et [user_marshal] doit suivre les règles de marshaling dictées par la spécification OSF-DCE. Pour cette raison, l’utilisation de ces attributs n’est pas recommandée si vous n’êtes pas familiarisé avec le protocole filaire. Pour plus d’informations sur le transfert de syntaxe NDR, consultez www.opengroup.org.
Cette section fournit une brève vue d’ensemble de ceux-ci pour les attributs MIDL, dans les rubriques suivantes :