Attribut user_marshal

L’attribut [ user_marshal] est un attribut de type ACF similaire en syntaxe à [ represent_as]. Comme avec l’attribut IDL, [ wire_marshal], il offre un moyen plus efficace de marshaler les données sur un réseau. En tant qu’attribut ACF, [user_marshal] vous permet de marshaler des types de données personnalisés inconnus de MIDL. Chaque type spécifique à l’application a un type de transmission correspondant qui définit la représentation filaire.

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.

Comme avec l’attribut [wire_marshal], vous fournissez des routines pour le dimensionnement, le marshaling, le démarshalage et la libération des passes. 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 [user_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 l’utilisateur 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 wire_marshal

Règles de marshaling pour le marshal d’utilisateurs et les wire_marshal

user_marshal

wire_marshal

NdrGetUserMarshalInfo