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]]
  , ...);

Paramètres

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.

Notes

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.

Exemples

/* a string type that can hold up to 80 characters */ 
typedef [string] char line[81]; 
 
HRESULT Proc1([in, string] char * pszName);

Voir aussi

Tableaux

MIDL Base Types

rappel

char

const

context_handle

Enum

first_is

Poignée

Fichier de définition d’interface (IDL)

Ignorer

last_is

length_is

Local

max_is

pointer_default

Ptr

Ref

size_is

Struct

switch_type

transmit_as

Union

Unique

wchar_t