Partager via


Fonction type_UserMarshal

La <fonction type>_UserMarshal est une fonction d’assistance pour les attributs [ wire_marshal] et [ user_marshal]. Les stubs appellent cette fonction pour marshaler les données côté client ou serveur. La fonction est définie comme suit :

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

Le <type> dans le nom de la fonction signifie le type userm spécifié dans la définition de type [wire_marshal] ou [user_marshal]. Ce type peut être non transtransmitable ou même, lorsqu’il est utilisé avec l’attribut [user_marshal], type inconnu du compilateur MIDL. Le nom du type de fil (nom du type transmissible) n’est pas utilisé dans le prototype de fonction. Notez, toutefois, que le type de fil définit la disposition de fil pour les données, comme spécifié par OSF DCE.

Le paramètre pFlags est un pointeur vers un champ d’indicateur long non signé. Le mot supérieur de l’indicateur contient des indicateurs de représentation des données de remise de remise tels que définis par OSF DCE pour les représentations à virgule flottante, en octets et en caractères. Le mot inférieur contient un indicateur de contexte de marshaling tel que défini par le canal COM. La disposition exacte des indicateurs dans le champ est décrite dans La fonction type_UserSize.

Le paramètre pBuffer est le pointeur de mémoire tampon actuel. Ce pointeur peut être aligné ou non lors de l’entrée. Votre <fonction de type>_UserMarshal doit aligner le pointeur de mémoire tampon de manière appropriée, marshaler les données et retourner la nouvelle position de mémoire tampon, qui est l’adresse du premier octet après l’objet marshalé. Gardez à l’esprit que la spécification du type de câble détermine la disposition réelle des données dans la mémoire tampon.

Le paramètre pMyObj est un pointeur vers un objet de type utilisateur.

La valeur de retour est la nouvelle position de la mémoire tampon, qui est l’adresse du premier octet après l’objet non délimité.

Un dépassement de mémoire tampon peut se produire lorsque vous calculez incorrectement la taille des données et que vous tentez de marshaler plus de données que prévu. Veillez à éviter cette situation. Vous pouvez case activée par rapport à celui-ci à l’aide du pointeur que <le type> _UserMarshal retourne. Sinon, vous risquez que le moteur de remise de remise déclenche une exception de dépassement de mémoire tampon ultérieurement.

Les exceptions doivent être interceptées et gérées localement, et les exceptions ne doivent pas être autorisées à monter dans la pile des appels.

Règles de marshaling pour user_marshal et wire_marshal

wire_marshal

user_marshal