атрибут union

Профсоюзный ключевое слово появляется в функциях, связанных с дискриминационными профсоюзами.

/* Encapsulated union*/
typedef [[ [type-attribute-list] ]] union [[ struct-name ]] switch (switch-type switch-name) [[ union-name ]] 
{
  C-style-case-list 
  [[ [ field-attribute-list <> ] ]] type-specifier <> declarator-list <>;

        ...
}

/* Non-encapsulated union*/
typedef [switch_type(switch-type) [[ , type-attr-list ]] ] union [[ tag ]] 
{ 
    [ case ( limited-expr-list) ]
  [[ [ field-attribute-list ] ]] type-specifier declarator-list;
  [[ [ default ]
  [[ [ field-attribute-list ] ]] type-specifier declarator-list;
  ]]
}

Параметры

type-attribute-list

Указывает ноль или несколько атрибутов, применяемых к типу объединения. Допустимые атрибуты типа: [handle], [transmit_as]; атрибут указателя [уникальный], или [ptr]; и атрибуты использования [context_handle] и [игнорировать]. Инкапсулированные объединения также могут иметь атрибут типа указателя [ссылка] . Разделяйте несколько атрибутов запятыми.

struct-name

Указывает необязательный тег, который называет структуру, созданную компилятором MIDL.

switch-type

Указывает тип int, char, тип перечисления или идентификатор, который разрешается в один из этих типов.

switch-name

Указывает имя переменной типа switch-type , выступающей в качестве дискриминанта объединения.

union-name

Указывает необязательный идентификатор, который называет объединение в структуре, созданной компилятором MIDL, которая содержит объединение и дискриминант.

C-style-case-list

Список "caseconst-expr :"

limited-expression-list

Задает одно или несколько выражений языка C. Компилятор MIDL поддерживает условные выражения, логические выражения, реляционные выражения и арифметические выражения. MIDL не разрешает вызовы функций в выражениях, а также операторы приращения и декремента. Отдельные выражения в списке должны быть разделены запятыми.

field-attribute-list

Задает ноль или несколько атрибутов поля, которые применяются к члену объединения. Допустимые атрибуты поля: [first_is], [last_is], [length_is], [max_is], [size_is]; атрибуты использования [string], [ignore], и [context_handle]; атрибут указателя [уникальный] или [ptr]; и для членов, которые являются некапсулированными объединениями, атрибут union [switch_type]. Неинкапсулированные объединения также могут использовать атрибут поля указателя [ref] . Разделяйте несколько атрибутов полей запятыми.

описатель типа

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

declarator-list

Один или несколько стандартных деклараторов C, таких как идентификаторы, деклараторы указателей и деклараторы массива. (Деклараторы функций и объявления битовых полей не допускаются в объединениях, передаваемых в удаленных вызовах процедур. За исключением случаев, когда вы используете параметр компилятора MIDL /osf, эти деклараторы разрешены в объединениях, которые не передаются.) Разделяйте несколько деклараторов запятыми.

Тег

Указывает необязательный тег.

Комментарии

MIDL поддерживает два типа дискриминируемых профсоюзов: инкапсулированные профсоюзы и некапсулированные профсоюзы. Инкапсулированное объединение совместимо с предыдущими реализациями RPC (NCA версии 1). Некапсулированный союз устраняет некоторые ограничения инкапсулированного союза и обеспечивает более заметный дискриминант, чем инкапсулированный союз.

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

Некапсулированное объединение, также известное как объединение, идентифицируется по наличию ключевых слов [switch_is] и [switch_type] , которые идентифицируют дискриминант и его тип.

При использовании [входных, исходящих] объединений следует учитывать, что изменение значения переключателя объединения во время вызова может сделать удаленный вызов иначе, чем локальный вызов. При возврате заглушки копируют параметр [in, out] в память, которая уже присутствует на клиенте. Когда удаленная процедура изменяет значение параметра объединения и, следовательно, изменяет размер объекта данных, заглушки могут перезаписать допустимую память значением [out] . Когда переключатель объединения изменяет объект данных с базового типа на тип указателя, заглушки могут перезаписать допустимую память при копировании ссылки указателя в расположение памяти, указанное значением [in] базового типа.

Форма объединений должна быть одинаковой на разных платформах, чтобы обеспечить взаимосвязь.

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

Инкапсулированные союзы

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

В

Некапсулированные союзы

Вне

switch_is

switch_type