string - атрибут
Атрибут [string] указывает, что одномерный символ, 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]. Разделите несколько атрибутов запятыми.
-
описатель типа
-
Задает базовый тип, тип структуры или идентификатор типа. Необязательная спецификация хранилища может предшествовать описательу типа.
-
Стандартный декларатор
-
Задает стандартный декларатор C, например идентификатор, декларатор указателя или декларатор массива. Дополнительные сведения см. в разделе "Массив" и Sized-Pointer "Атрибуты", "Массивы", " Массивы" и "Указатели".
-
declarator-list
-
Задает стандартные деклараторы C, такие как идентификаторы, деклараторы указателей и деклараторы массива. Дополнительные сведения см. в разделе "Массив" и Sized-Pointer "Атрибуты", "Массивы", " Массивы" и "Указатели". Список деклараторов состоит из одного или нескольких деклараторов, разделенных запятыми. Идентификатор имени параметра в деклараторе функции является необязательным.
-
field-attribute-list
-
Указывает ноль или больше атрибутов полей, которые применяются к параметру структуры, члена объединения или функции. Два допустимых атрибута поля: [max_is] и [size_is]; атрибуты использования [string], [ignore], и [context_handle], атрибут указателя [ref], [unique], или [ptr], а также атрибут объединения [switch_type]. Разделите несколько атрибутов поля запятыми.
-
function-attribute-list
-
Указывает ноль или больше атрибутов, которые применяются к функции. Допустимые атрибуты функции: [callback], [local]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [string], [ignore], и [context_handle].
-
ptr-decl
-
Указывает необязательный декларатор указателя, к которому применяется атрибут [string ]. Декларатор указателя совпадает с декларатором указателя, используемым в C; он создается на основе конструктора *, модификаторов, таких как даль, и константы квалификатора.
-
имя функции
-
Указывает имя удаленной процедуры.
-
parameter-attribute-list
-
Состоит из нуля или нескольких атрибутов, соответствующих указанному типу параметра. Атрибуты параметров могут принимать атрибуты направления [in] и [out]; атрибуты полей [max_is] и [size_is]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [context_handle] и [string]. Атрибут использования [ignore] нельзя использовать в качестве атрибута параметра. Разделите несколько атрибутов запятыми.
Remarks
Если атрибут [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);
См. также