Attribut wire_marshal

L’attribut [ wire_marshal] est un attribut de type IDL similaire en syntaxe à [ transmit_as], mais qui offre un moyen plus efficace de marshaler des données sur un réseau.

Vous utilisez l’attribut [wire_marshal] pour spécifier un type de données qui sera transmis à la place du type de données spécifique à l’application. Chaque type spécifique à l’application a un type de transmission correspondant qui définit la représentation filaire (représentation utilisée sur le réseau). Le type spécifique à l’application n’a pas besoin d’être transmettable, mais il doit s’agir d’un type que MIDL reconnaît. Pour marshaler un type inconnu en MIDL, utilisez l’attribut ACF [ user_marshal].

Votre type spécifique à l’application peut être un type simple, composite ou pointeur. La restriction main est que le type instance doit avoir une taille de mémoire fixe et bien définie. Si la taille de votre type instance doit changer, utilisez un champ pointeur plutôt qu’un tableau conforme. Vous pouvez également définir un pointeur vers le type modifiable.

Vous devez fournir les routines de dimensionnement, de marshaling et de démarshalation des données, ainsi que de libération de la mémoire associée. Le tableau suivant décrit les quatre noms de routine fournis par l’utilisateur. Le <type> est le type userm spécifié dans la définition de type [wire_marshal].

Routine Description
<type> _UserSize Dimensionne la mémoire tampon de données RPC avant de marshaler côté client ou serveur.
<type> _UserMarshal Marshale les données côté client ou serveur.
<type> _UserUnmarshal Désactive les données côté client ou serveur.
<type> _UserFree Libère les données côté serveur.

 

Ces routines fournies par le programmeur sont fournies par le client ou l’application serveur en fonction des attributs directionnels.

Si le paramètre est [ in] uniquement, le client transmet au serveur. Le client a besoin des <fonctions type>_UserSize et <type>_UserMarshal . Le serveur a besoin des <fonctions type>_UserUnmarshal et <type>_UserFree .

Pour un paramètre [ out]-only, le serveur transmet au client. Le serveur a besoin des <fonctions type>_UserSize et <type>_UserMarshal , tandis que le client a besoin de la <fonction type>_UserMarshal .

Attribut user_marshal

Règles de marshaling pour user_marshal et wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo