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);
См. также