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

См. также раздел

Массивы

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

Обратного вызова

Char

const

context_handle

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

first_is

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

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

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

last_is

length_is

Местных

max_is

pointer_default

Ptr

Ref

size_is

Структура

switch_type

transmit_as

union

Уникальный

wchar_t