string - атрибут
Атрибут [string] указывает, что одномерный массив char, wchar_t, байтовый (или эквивалентный) массив или указатель на такой массив должны рассматриваться как строка. Строка также может быть массивом (или указателем на массив) конструкций, поля которых являются байтами типа.
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
-
Указывает один или несколько атрибутов, применяемых к типу. Допустимые атрибуты типа: [handle], [switch_type], [transmit_as]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [context_handle], [string] и [ignore]. Разделяйте несколько атрибутов запятыми.
-
type-specifier
-
Задает базовый тип, тип структуры или идентификатор типа. Необязательная спецификация хранилища может предшествовать описательу типа.
-
Стандартный декларатор
-
Указывает стандартный декларатор C, например идентификатор, декларатор указателя или декларатор массива. Дополнительные сведения см. в разделах Атрибуты массива и Sized-Pointer, массивы и массивы и указатели.
-
Declarator-list
-
Задает стандартные деклараторы C, такие как идентификаторы, деклараторы указателей и деклараторы массива. Дополнительные сведения см. в разделах Атрибуты массива и Sized-Pointer, массивы и массивы и указатели. Список деклараторов состоит из одного или нескольких деклараторов, разделенных запятыми. Идентификатор parameter-name в деклараторе функции является необязательным.
-
field-attribute-list
-
Указывает ноль или несколько атрибутов поля, которые применяются к параметру структуры, члена объединения или функции. Два допустимых атрибута поля: [max_is] и [size_is]; атрибуты использования [string], [ignore] и [context_handle], атрибут указателя [ref], [unique] или [ptr] и атрибут union [switch_type]. Разделяйте несколько атрибутов полей запятыми.
-
function-attribute-list
-
Указывает ноль или несколько атрибутов, применяемых к функции. Допустимые атрибуты функции: [callback], [local]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [string], [ignore] и [context_handle].
-
ptr-decl
-
Указывает необязательный декларатор указателя, к которому применяется атрибут [string] . Декларатор указателя совпадает с декларатором указателя, используемым в C; он создается из конструктора *, модификаторов, таких как far, и const квалификатора.
-
function-name
-
Указывает имя удаленной процедуры.
-
parameter-attribute-list
-
Состоит из нуля или нескольких атрибутов, соответствующих указанному типу параметра. Атрибуты параметра могут принимать атрибуты направления [in] и [out]; атрибуты поля [max_is] и [size_is]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [context_handle] и [строка]. Атрибут использования [ignore] нельзя использовать в качестве атрибута параметра. Разделяйте несколько атрибутов запятыми.
Если атрибут [string] используется с массивом, границы которого определяются во время выполнения, необходимо также указать атрибут [size_is] или [max_is] , как показано в следующем примере:
/* a string that can hold up to MAX_STRING_LENGTH characters */
typedef [string, max_is(MAX_STRING_LENGTH)] char line[];
Атрибут [string] нельзя использовать с атрибутами, указывающими диапазон передаваемых элементов, таких как [first_is], [last_is] и [length_is].
При использовании в многомерных массивах атрибут [string] применяется к крайнему правому массиву.
Чтобы определить подсчитываемую строку, не используйте атрибут [string] . Используйте массив символов или указатель на основе символов, например:
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} counted_string;
Атрибут [string] указывает, что заглушка должна использовать предоставленный языком метод для определения длины строк.
При объявлении строк в C необходимо выделить место для дополнительного символа, который помечает конец строки.
/* a string type that can hold up to 80 characters */
typedef [string] char line[81];
HRESULT Proc1([in, string] char * pszName);