ref (attribut)

L’attribut [ref] identifie un pointeur de référence. Il est utilisé simplement pour représenter un niveau d’indirection.

pointer_default(ref)

typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list; 

typedef [ struct | union ] 
{
    [ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
    ...}

[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
    [ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
    , ...);

Paramètres

type-attribute-list

Spécifie un ou plusieurs attributs qui s’appliquent au type. Les attributs de type valides incluent [handle],[switch_type], [transmit_as] ; les attributs du pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [context_handle], [string] et [ignore]. Séparez plusieurs attributs par des virgules.

spécificateur de type

Spécifie un type de base, un struct, une union ou un type d’énumération ou un identificateur de type. Une spécification de stockage facultative peut précéder le spécificateur de type.

standard-declarator

Spécifie un déclarateur C standard, tel qu’un identificateur, un déclarateur de pointeur ou un déclarateur de tableau. Pour plus d’informations, consultez Tableaux et Sized-Pointer Attributs, tableaux et tableaux et pointeurs.

declarator-list

Spécifie les déclarateurs C standard, tels que les identificateurs, les déclarateurs de pointeurs et les déclarateurs de tableau. Pour plus d’informations, consultez Tableaux et Sized-Pointer Attributs, tableaux et tableaux et pointeurs. La liste déclaratrice se compose d’un ou plusieurs déclarateurs séparés par des virgules. L’identificateur de nom de paramètre dans le déclarateur de fonction est facultatif.

field-attribute-list

Spécifie un ou plusieurs attributs de champ qui s’appliquent au paramètre de structure, de membre d’union ou de fonction. Les attributs de champ valides incluent [first_is],[last_is], [length_is], [max_is], [size_is] ; les attributs d’utilisation [string], [ignore] et [context_handle]; l’attribut pointeur [ref], [unique] ou [ptr]; et l’attribut union [switch_type]. Séparez plusieurs attributs de champ par des virgules.

function-attribute-list

Spécifie zéro ou plusieurs attributs qui s’appliquent à la fonction. Les attributs de fonction valides sont [rappel], [local]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [string], [ignore]et [context_handle].

ptr-decl

Spécifie au moins un déclarateur de pointeur auquel l’attribut [ref] s’applique. Un déclarateur de pointeur est identique au déclarateur de pointeur utilisé dans C ; il est construit à partir de l’indicateur *, des modificateurs tels que la distance et du qualificateur const.

nom de la fonction

Spécifie le nom de la procédure distante.

parameter-attribute-list

Se compose de zéro ou plusieurs attributs appropriés pour le type de paramètre spécifié. Les attributs de paramètre peuvent prendre les attributs directionnels [in] et [out]; les attributs de champ [first_is],[last_is], [length_is], [max_is], [size_is] et [switch_type]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [context_handle] et [string]. L’attribut d’utilisation [ignore] ne peut pas être utilisé comme attribut de paramètre. Séparez plusieurs attributs par des virgules.

Notes

Un attribut pointeur peut être appliqué en tant qu’attribut de type, en tant qu’attribut de champ qui s’applique à un membre de structure, à un membre d’union ou à un paramètre ; ou en tant qu’attribut de fonction qui s’applique au type de retour de fonction. L’attribut pointeur peut également apparaître avec l’mot clé [pointer_default].

Un pointeur de référence présente les caractéristiques suivantes :

  • Pointe toujours vers le stockage valide ; n’a jamais la valeur NULL. Un pointeur de référence peut toujours être déréférencé.
  • Ne change jamais pendant un appel. Un pointeur de référence pointe toujours vers le même stockage sur le client avant et après l’appel.
  • N’alloue pas de nouvelle mémoire sur le client. Les données retournées par le serveur sont écrites dans le stockage existant spécifié par la valeur du pointeur de référence avant l’appel.
  • Ne provoque pas d’alias. Le stockage pointé vers par un pointeur de référence n’est accessible à partir d’aucun autre nom dans la fonction.

Un pointeur de référence ne peut pas être utilisé comme type d’un pointeur retourné par une fonction.

Si aucun attribut n’est spécifié pour un paramètre de pointeur de niveau supérieur, il est traité comme un pointeur de référence.

Exemples

[unique] char * GetFirstName( 
    [in, ref] char * pszFullName);

Voir aussi

Tableaux

Tableaux et pointeurs

Attributs de tableau et de Sized-Pointer

MIDL Base Types

rappel

const

context_handle

Enum

first_is

Poignée

Ignorer

last_is

length_is

Local

max_is

out

Ptr

size_is

String

Struct

switch_type

transmit_as

Union

Unique