ref - атрибут

Атрибут [ref] определяет указатель ссылки. Он используется просто для представления уровня косвенного обращения.

pointer_default(ref)

typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list; 

typedef [ struct | union ] 
{
    [ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
    ...}

[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
    [ ref [[ , 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

Указывает ноль или больше атрибутов полей, которые применяются к параметру структуры, члена объединения или функции. Допустимые атрибуты полей: [first_is], [last_is], [length_is], [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

Указывает по крайней мере один декларатор указателя, к которому применяется атрибут [ref ]. Декларатор указателя совпадает с декларатором указателя, используемым в C; он создается на основе конструктора *, модификаторов, таких как даль, и константы квалификатора.

имя функции

Указывает имя удаленной процедуры.

parameter-attribute-list

Состоит из нуля или нескольких атрибутов, соответствующих указанному типу параметра. Атрибуты параметров могут принимать атрибуты направления [in] и [out]; атрибуты полей [first_is], [last_is], [length_is], [max_is], [size_is], и [switch_type]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [context_handle] и [string]. Атрибут использования [ignore] нельзя использовать в качестве атрибута параметра. Разделите несколько атрибутов запятыми.

Remarks

Атрибут указателя можно применить как атрибут типа, как атрибут поля, который применяется к элементу структуры, члену объединения или параметру; или как атрибут функции, который применяется к типу возвращаемого значения функции. Атрибут указателя также может отображаться с ключевым словом [pointer_default] .

Указатель ссылки имеет следующие характеристики:

  • Всегда указывает на допустимое хранилище; никогда не имеет значения NULL. Ссылочный указатель всегда можно разыменовыть.
  • Никогда не меняется во время звонка. Указатель ссылки всегда указывает на то же хранилище на клиенте до и после вызова.
  • Не выделяет новую память на клиенте. Данные, возвращаемые с сервера, записываются в существующее хранилище, указанное значением указателя ссылки перед вызовом.
  • Не вызывает псевдонимов. служба хранилища, на который указывает указатель ссылки, не может быть достигнут из любого другого имени в функции.

Ссылочные указатели нельзя использовать в качестве типа указателя, возвращаемого функцией.

Если для параметра указателя верхнего уровня не указан атрибут, он обрабатывается как ссылочные указатели.

Примеры

[unique] char * GetFirstName( 
    [in, ref] char * pszFullName);

См. также

Массивы

Массивы и указатели

Атрибуты массива и Sized-Pointer

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

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

const

context_handle

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

first_is

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

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

last_is

length_is

Местных

max_is

out

ptr

size_is

строка

Структура

switch_type

transmit_as

Союза

Уникальный