string (atributo)
El atributo [string] indica que la matriz unidimensional char, wchar_t, byte (o equivalente) o el puntero a dicha matriz debe tratarse como una cadena. La cadena también puede ser una matriz (o un puntero a una matriz) de construcciones cuyos campos son todos de tipo 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
-
Especifica uno o varios atributos que se aplican a un tipo. Los atributos de tipo válidos incluyen [handle], [switch_type], [transmit_as]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle], [string] y [ignore]. Separe varios atributos con comas.
-
type-specifier
-
Especifica un tipo base, un tipo de estructura o un identificador de tipo. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.
-
declarador estándar
-
Especifica un declarador de C estándar, como un identificador, un declarador de puntero o un declarador de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays., and Arrays and Pointers.
-
declarator-list
-
Especifica declaradores de C estándar, como identificadores, declaradores de puntero y declaradores de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays., and Arrays and Pointers. La lista de declaradores consta de uno o varios declaradores separados por comas. El identificador parameter-name del declarador de función es opcional.
-
field-attribute-list
-
Especifica cero o más atributos de campo que se aplican a la estructura, al miembro de unión o al parámetro de función. Los dos atributos de campo válidos son [max_is] y [size_is]; los atributos de uso [string], [ignore]y [context_handle], el atributo de puntero [ref], [unique]o [ptr], y el atributo union [switch_type]. Separe varios atributos de campo con comas.
-
function-attribute-list
-
Especifica cero o más atributos que se aplican a la función. Los atributos de función válidos son [devolución de llamada], [local]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [string], [ignore]y [context_handle].
-
ptr-decl
-
Especifica un declarador de puntero opcional al que se aplica el atributo [string ]. Un declarador de puntero es el mismo que el declarador de puntero usado en C; se construye a partir del designador *, modificadores como far y el calificador const.
-
nombre de función
-
Especifica el nombre del procedimiento remoto.
-
parameter-attribute-list
-
Consta de cero o más atributos adecuados para el tipo de parámetro especificado. Los atributos de parámetro pueden tomar los atributos direccionales [in] y [out]; los atributos de campo [max_is] y [size_is]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle] y [string]. El atributo de uso [ignore] no se puede usar como atributo de parámetro. Separe varios atributos con comas.
Si el atributo [string] se usa con una matriz cuyos límites se determinan en tiempo de ejecución, también debe especificar un atributo [size_is] o [max_is], como en el ejemplo siguiente:
/* a string that can hold up to MAX_STRING_LENGTH characters */
typedef [string, max_is(MAX_STRING_LENGTH)] char line[];
El atributo [string] no se puede usar con atributos que especifican el intervalo de elementos transmitidos, como [first_is], [last_is] y [length_is].
Cuando se usa en matrices multidimensionales, el atributo [string] se aplica a la matriz más a la derecha.
Para definir una cadena contada, no use el atributo [string]. Use una matriz de caracteres o un puntero basado en caracteres, como los siguientes:
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} counted_string;
El atributo [string] especifica que el código auxiliar debe usar un método proporcionado por el lenguaje para determinar la longitud de las cadenas.
Al declarar cadenas en C, debe asignar espacio para un carácter adicional que marque el final de la cadena.
/* a string type that can hold up to 80 characters */
typedef [string] char line[81];
HRESULT Proc1([in, string] char * pszName);