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);

См. также

Массивы

Базовые типы MIDL

обратный вызов

char

const

context_handle

Перечисления

first_is

Обрабатывать

Файл определения интерфейса (IDL)

Игнорировать

last_is

length_is

Местных

max_is

pointer_default

ptr

Ref

size_is

Структура

switch_type

transmit_as

Союза

Уникальный

wchar_t