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 .
Rubriques connexes