Поделиться через


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]; атрибуты указателя [ссылка], [уникальный], или [ptr]; и атрибуты использования [context_handle], [строка] и [игнорировать]. Разделяйте несколько атрибутов запятыми.

type-specifier

Указывает базовый тип, структуру, объединение, тип перечисления или идентификатор типа. Необязательная спецификация хранилища может предшествовать описательу типа.

Стандартный декларатор

Указывает стандартный декларатор C, например идентификатор, декларатор указателя или декларатор массива. Дополнительные сведения см. в разделе Атрибуты массива и Sized-Pointer, массивы и массивы и указатели.

Declarator-list

Задает стандартные деклараторы C, такие как идентификаторы, деклараторы указателей и деклараторы массива. Дополнительные сведения см. в разделе Атрибуты массива и Sized-Pointer, массивы и массивы и указатели. Список деклараторов состоит из одного или нескольких деклараторов, разделенных запятыми. Идентификатор parameter-name в деклараторе функции является необязательным.

field-attribute-list

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

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

function-name

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

parameter-attribute-list

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

Комментарии

Атрибут указателя можно применять как атрибут типа, как атрибут поля, который применяется к элементу структуры, элементу объединения или параметру; или как атрибут функции, который применяется к типу возвращаемого значения функции. Атрибут указателя также может отображаться с ключевое слово [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

union

Уникальный