Fonction type_UserSize
La fonction>_UserSize de type<est une fonction d’assistance pour les attributs [ wire_marshal] et [ user_marshal]. Les stubs appellent cette fonction pour dimensionner la mémoire tampon de données RPC pour l’objet de données utilisateur avant que les données ne sont marshalées côté client ou serveur. La fonction est définie comme suit :
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
Le type <> dans le nom de la fonction signifie le type utilisateur, tel que spécifié dans la [wire_marshal] ou [user_marshal] définition de type. Ce type peut être nontransmitable ou même, lorsqu’il est utilisé avec l’attribut de [user_marshal] , inconnu du compilateur MIDL. Le nom du type de câble (le nom du type transmis sur le réseau) n’est pas utilisé dans le prototype de fonction. Notez toutefois que le type de câble définit la disposition des données comme spécifié par OSF DCE. Toutes les données doivent être converties au format de représentation des données réseau (NDR).
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 format NDR tels que définis par OSF DCE pour les représentations à virgule flottante, l’ordre d’octet et les représentations de 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 indiquée dans le tableau suivant.
Bribes | Drapeau | Valeur |
---|---|---|
31-24 | Représentation à virgule flottante | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
23-20 | Entier et ordre d’octet à virgule flottante | 0 = Big-endian 1 = Little-endian |
19-16 | Représentation de caractères | 0 = ASCII 1 = EBCDIC |
15-0 | Indicateur de contexte de marshaling | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
L’indicateur de contexte de marshaling permet de modifier le comportement de votre routine en fonction du contexte de l’appel RPC. Par exemple, si vous avez un handle (long) à un bloc de données, vous pouvez envoyer le handle pour un appel in-process, mais vous envoyez les données réelles d’un appel à un autre ordinateur. L’indicateur de contexte de marshaling et ses valeurs sont définis dans les fichiers Wtypes.h et Wtypes.idl dans le Kit de développement logiciel (SDK) platform.
Note
Lorsque le type de câble est correctement défini, vous n’avez pas besoin d’utiliser les indicateurs de format de remise, car le moteur de remise effectue les conversions nécessaires.
Le StartingSize un paramètre est le décalage de mémoire tampon actuel. La taille de départ indique le décalage de la mémoire tampon pour l’objet utilisateur, et il peut ou ne pas être aligné correctement. Votre routine doit tenir compte de tout remplissage nécessaire.
Le paramètre pMyObj est un pointeur vers un objet de type utilisateur.
La valeur de retour est la nouvelle position de décalage ou de mémoire tampon. La fonction doit retourner la taille cumulative, c’est-à-dire la taille de départ ainsi que le remplissage possible et la taille des données.
La fonction <type>_UserSize peut retourner un surestimate de la taille nécessaire. La taille réelle de la mémoire tampon envoyée est définie par la taille des données, et non par la taille d’allocation de mémoire tampon.
La fonction <type>_UserSize n’est pas appelée si la taille du câble peut être calculée au moment de la compilation. Notez que pour la plupart des unions, même s’il n’y a pas de pointeur, la taille réelle de la représentation filaire ne peut être déterminée qu’au moment de l’exécution.
Rubriques connexes
-
règles de marshaling pour user_marshal et wire_marshal