attribut de nombre d’octets _

L’attribut ACF de [ _ nombre ] d’octets est un attribut de paramètre qui associe une taille, en octets, à la zone de mémoire indiquée par le pointeur.

[ function-attribute-list ] function-name(
    [byte_count(length-variable-name)] parameter-name);
    ...);

Paramètres

function-attribute-List

Spécifie zéro, un ou plusieurs attributs de fonction ACF.

nom de fonction

Spécifie le nom de la fonction définie dans le fichier IDL. Le nom de la fonction est obligatoire.

Length-variable-name

Spécifie le nom du paramètre [ en ]uniquement qui spécifie la taille, en octets, de la zone mémoire référencée par le paramètre-Name.

nom du paramètre

Spécifie le nom du paramètre de pointeur en [ sortie ]seule défini dans le fichier IDL.

Notes

Le [ _ nombre ] d’octets de l’attribut ACF représente une extension Microsoft de l’IDL DCE. Par conséquent, cet attribut n’est pas disponible lorsque vous utilisez le commutateur du compilateur MIDL /OSF.

Notes

L’attribut [ nombre ] d’octets n’est plus pris en charge dans la syntaxe NDR64 en raison de la difficulté à estimer la taille requise pour tous les paramètres de [ sortie ] .

La mémoire référencée par le paramètre de pointeur est contiguë et n’est pas allouée ou libérée par les stubs client. Cette fonctionnalité de l’attribut [ _ nombre ] d’octets vous permet de créer une zone de mémoire tampon persistante dans la mémoire du client qui peut être réutilisée lors de plusieurs appels à la procédure distante.

La possibilité de désactiver l’allocation de mémoire stub du client vous permet de régler l’efficacité de l’application. Par exemple, l’attribut [ _ nombre ] d’octets peut être utilisé par les fonctions de fournisseur de service qui utilisent Microsoft RPC. Lorsqu’une application utilisateur appelle l’API du fournisseur de services et envoie un pointeur vers une mémoire tampon, le fournisseur de services peut passer le pointeur de la mémoire tampon à la fonction distante. Le fournisseur de services peut réutiliser la mémoire tampon pendant plusieurs appels distants sans forcer l’utilisateur à réallouer la zone mémoire.

La zone mémoire peut contenir des structures de données complexes qui se composent de plusieurs pointeurs. Étant donné que la zone mémoire est contiguë, l’application n’a pas besoin d’effectuer plusieurs appels pour libérer individuellement chaque pointeur et structure. Au lieu de cela, il peut allouer ou libérer la zone mémoire avec un appel à l’allocation de mémoire ou à la routine libre.

La mémoire tampon doit être un paramètre en [ sortie ]seule, tandis que la longueur de la mémoire tampon en octets doit être un paramètre [ en ]uniquement.

Spécifiez une mémoire tampon suffisamment grande pour contenir tous les paramètres de [ sortie ] . En raison du remplissage masqué, utilisez des surestimations plutôt que des nombres exacts. Par exemple, les pointeurs de 4 octets sont démarshalés sur une limite alignée sur 4 octets sur les plateformes 32 bits et les pointeurs de 8 octets sur une limite de 8 octets sur les plateformes 64 bits. Par conséquent, le remplissage de l’alignement effectué par les stubs doit être comptabilisé dans l’espace de la mémoire tampon. En outre, les niveaux de compression utilisés pendant la compilation en langage C peuvent varier. Utilisez une valeur de nombre d’octets qui tient compte des octets de compression supplémentaires ajoutés au niveau de compactage utilisé lors de la compilation en langage C. Une pratique sûre qui couvre à la fois les plateformes 32 bits et les plateformes 64 bits consiste à supposer que chaque objet entrant dans le bloc Big Memory commence à une adresse qui est un multiple de 8.

Exemples

/* IDL file */ 
HRESULT proc1([in] unsigned long length, 
              [out] struct my_struct * pMyStruct); 
 
/* ACF file */ 
proc1([byte_count(length)] pMyStruct);

Voir aussi

Fichier de configuration de l’application (ACF)

dans

la longueur _ est

/osf

à

la taille _ est