string (attributo)

L'attributo [string] indica che la matrice di caratteriunidimensionali, wchar_t, byte (o equivalente) o il puntatore a tale matrice deve essere considerato come stringa. La stringa può anche essere una matrice (o un puntatore a una matrice) di costrutti i cui campi sono tutti i byte di tipo.

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

Parametri

type-attribute-list

Specifica uno o più attributi che si applicano a un tipo. Gli attributi di tipo validi includono [handle], [switch_type], [transmit_as]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle], [string]e [ignora]. Separare più attributi con virgole.

identificatore di tipo

Specifica un tipo di base, un tipo di struct o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.

dichiaratore standard

Specifica un dichiaratore C standard, ad esempio un identificatore, un dichiaratore puntatore o un dichiaratore di matrice. Per altre informazioni, vedere Matrice e attributi Sized-Pointer, matricie matrici e puntatori.

declarator-list

Specifica i dichiaratori C standard, ad esempio identificatori, dichiaratori di puntatore e dichiaratori di matrice. Per altre informazioni, vedere Matrice e attributi Sized-Pointer, matricie matrici e puntatori. L'elenco dichiaratore è costituito da uno o più dichiaratori separati da virgole. L'identificatore del nome del parametro nel dichiaratore di funzioni è facoltativo.

field-attribute-list

Specifica zero o più attributi di campo che si applicano alla struttura, al membro dell'unione o al parametro della funzione. I due attributi di campo validi sono [max_is] e [size_is]; gli attributi di utilizzo [string], [ignore]e [context_handle], l'attributo puntatore [ref],[unique]o [ptr], e l'attributo union [switch_type]. Separare più attributi di campo con virgole.

function-attribute-list

Specifica zero o più attributi che si applicano alla funzione. Gli attributi di funzione validi sono [callback], [local]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string], [ignore]e [context_handle].

ptr-decl

Specifica un dichiaratore di puntatore facoltativo a cui si applica l'attributo [stringa]. Un dichiaratore puntatore è lo stesso del dichiaratore puntatore usato in C; viene costruito dal designatore *, modificatori come la lontano e il qualificatore const.

nome funzione

Specifica il nome della routine remota.

parameter-attribute-list

È costituito da zero o più attributi appropriati per il tipo di parametro specificato. Gli attributi dei parametri possono accettare gli attributi direzionali [in] e [out]; gli attributi del campo [max_is] e [size_is]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle] e [string]. Impossibile usare l'attributo di utilizzo [ignore] come attributo di parametro. Separare più attributi con virgole.

Commenti

Se l'attributo [string] viene usato con una matrice i cui limiti vengono determinati in fase di esecuzione, è necessario specificare anche un attributo [size_is] o [max_is] come nell'esempio seguente:

/* a string that can hold up to MAX_STRING_LENGTH characters */
typedef [string, max_is(MAX_STRING_LENGTH)] char line[];

Impossibile usare l'attributo [stringa] con attributi che specificano l'intervallo di elementi trasmessi, ad esempio [first_is], [last_is]e [length_is].

Se usato su matrici multidimensionali, l'attributo [string] si applica alla matrice più a destra.

Per definire una stringa conteggiata, non usare l'attributo [string] . Usare una matrice di caratteri o un puntatore basato su caratteri, ad esempio quanto segue:

typedef struct 
{ 
    unsigned short size; 
    unsigned short length; 
    [size_is(size), length_is(length)] char string[*]; 
} counted_string;

L'attributo [string] specifica che lo stub deve usare un metodo fornito dal linguaggio per determinare la lunghezza delle stringhe.

Quando si dichiarano stringhe in C, è necessario allocare spazio per un carattere aggiuntivo che contrassegna la fine della stringa.

Esempi

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

Vedere anche

Matrici

Tipi di base MIDL

callback

Char

const

context_handle

Enum

first_is

Gestire

File IDL (Interface Definition)

Ignorare

last_is

length_is

Locale

max_is

pointer_default

Ptr

Ref

size_is

Struct

switch_type

transmit_as

Unione

Unico

wchar_t