attribut de chaîne
L’attribut [string] indique que le tableau char, wchar_t, octets (ou équivalent) unidimensionnel ou le pointeur vers un tel tableau doit être traité comme une chaîne. La chaîne peut également être un tableau (ou un pointeur vers un tableau) de constructions dont les champs sont tous de type byte.
typedef [ string [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ string [[ , field-attribute-list ]] ] type-specifier declarator-list;
...
};
[ string [[ , function-attribute-list ]] ] type-specifier ptr-decl function-name(
[[ [ parameter-attribute-list ] ]] type-specifier [[standard-declarator]]
, ...);
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ string [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
-
type-attribute-list
-
Spécifie un ou plusieurs attributs qui s’appliquent à un type. Les attributs de type valides incluent [handle], [switch_type], [transmit_as]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [context_handle],[string] et [ignore]. Séparez plusieurs attributs par des virgules.
-
type-specifier
-
Spécifie un type de base, un type struct 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 Array and Sized-Pointer Attributes, arrays., and Arrays and Pointers.
-
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 Array and Sized-Pointer Attributes, arrays., and Arrays and Pointers. Le declarator-list se compose d’un ou plusieurs déclarateurs séparés par des virgules. L’identificateur nom-paramètre dans le déclarateur de fonction est facultatif.
-
field-attribute-list
-
Spécifie zéro ou plusieurs attributs de champ qui s’appliquent au paramètre de structure, de membre d’union ou de fonction. Les deux attributs de champ valides sont [max_is] et [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 [callback], [local]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [string], [ignore] et [context_handle].
-
ptr-decl
-
Spécifie un déclarateur de pointeur facultatif auquel l’attribut [string] s’applique. Un déclarateur de pointeur est identique au déclarateur de pointeur utilisé dans C ; il est construit à partir du désignateur *, des modificateurs tels que far, et du qualificateur const.
-
function-name
-
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 [max_is] et [size_is] ; 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.
Si l’attribut [string] est utilisé avec un tableau dont les limites sont déterminées au moment de l’exécution, vous devez également spécifier un attribut [size_is] ou [max_is], comme dans l’exemple suivant :
/* a string that can hold up to MAX_STRING_LENGTH characters */
typedef [string, max_is(MAX_STRING_LENGTH)] char line[];
L’attribut [string] ne peut pas être utilisé avec des attributs qui spécifient la plage d’éléments transmis, tels que [first_is],[last_is] et [length_is].
Lorsqu’il est utilisé sur des tableaux multidimensionnels, l’attribut [string] s’applique au tableau le plus à droite.
Pour définir une chaîne comptée, n’utilisez pas l’attribut [string]. Utilisez un tableau de caractères ou un pointeur basé sur des caractères comme suit :
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} counted_string;
L’attribut [string] spécifie que le stub doit utiliser une méthode fournie par la langue pour déterminer la longueur des chaînes.
Lorsque vous déclarez des chaînes en C, vous devez allouer de l’espace pour un caractère supplémentaire qui marque la fin de la chaîne.
/* a string type that can hold up to 80 characters */
typedef [string] char line[81];
HRESULT Proc1([in, string] char * pszName);