Attribut wire_marshal
L’attribut [ wire_marshal] est un attribut de type IDL similaire à [ transmit_as], mais fournit un moyen plus efficace de marshaler les 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 transmettable 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 dans MIDL, utilisez l’attribut ACF [ user_marshal].
Votre type spécifique à l’application peut être un type simple, composite ou pointeur. La restriction principale est que l’instance de type doit avoir une taille de mémoire fixe et bien définie. Si la taille de votre instance de type doit changer, utilisez un champ de 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 libérer la mémoire associée. Le tableau suivant décrit les quatre noms de routine fournis par l’utilisateur. Le type <> est le type utilisateur spécifié dans la définition de type [wire_marshal].
Routine | Description |
---|---|
<type>_UserSize | Dimensionne la mémoire tampon de données RPC avant le marshaling côté client ou serveur. |
<type>_UserMarshal | Marshale les données côté client ou serveur. |
<type>_UserUnmarshal | Annule 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 [ dans] uniquement, le client transmet au serveur. Le client a besoin des fonctions de type <>_UserSize et de <de type>_UserMarshal. Le serveur a besoin des fonctions>_UserUnmarshal de type<et de type <>_UserFree.
Pour un paramètre [ out]-only, le serveur transmet au client. Le serveur a besoin du type <>_UserSize et des fonctions de type <>_UserMarshal, tandis que le client a besoin de la fonction>_UserMarshal de type<.
Rubriques connexes
-
règles de marshaling pour user_marshal et wire_marshal