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