atributo union

A união palavra-chave aparece em funções relacionadas a uniões discriminadas.

/* 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;
  ]]
}

Parâmetros

type-attribute-list

Especifica zero ou mais atributos que se aplicam ao tipo de união. Os atributos de tipo válidos incluem [handle], [transmit_as]; o atributo de ponteiro [unique], ou [ptr]; e os atributos de uso [context_handle] e [ignore]. Uniões encapsuladas também podem ter o atributo de tipo de ponteiro[ref]. Separe vários atributos com vírgulas.

struct-name

Especifica uma marca opcional que nomeia a estrutura gerada pelo compilador MIDL.

tipo de comutador

Especifica um tipo int, char, enum ou um identificador que é resolvido para um desses tipos.

switch-name

Especifica o nome da variável do tipo switch-type que atua como o discriminador de união.

union-name

Especifica um identificador opcional que nomeia a união na estrutura, gerada pelo compilador MIDL, que contém a união e o discriminador.

C-style-case-list

Lista de "caseconst-expr :"

limited-expression-list

Especifica uma ou mais expressões de linguagem C. O compilador MIDL dá suporte a expressões condicionais, expressões lógicas, expressões relacionais e expressões aritméticas. MIDL não permite invocações de função em expressões e não permite operadores de incremento e decremento. Expressões individuais na lista devem ser separadas por uma vírgula.

field-attribute-list

Especifica zero ou mais atributos de campo que se aplicam ao membro da união. Os atributos de campo válidos incluem [first_is], [last_is], [length_is], [max_is], [size_is]; os atributos de uso [string], [ignore]e [context_handle]; o atributo de ponteiro [exclusivo] ou [ptr]; e, para membros que são uniões não anátuladas, o atributo union [switch_type]. Uniões nonencapsuladas também podem usar o atributo de campo de ponteiro [ref] . Separe vários atributos de campo com vírgulas.

type-specifier

Especifica um tipo base, struct, união, tipo de enumeração ou identificador de tipo. Uma especificação de armazenamento opcional pode preceder o especificador de tipo.

declarator-list

Um ou mais declaradores C padrão, como identificadores, declaradores de ponteiro e declaradores de matriz. (Declaradores de função e declarações de campo de bit não são permitidos em uniões transmitidas em chamadas de procedimento remoto. Exceto quando você usa a opção /osf do compilador MIDL, esses declaradores são permitidos em uniões que não são transmitidas.) Separe vários declaradores com vírgulas.

tag

Especifica uma marca opcional.

Comentários

A MIDL dá suporte a dois tipos de uniões discriminadas: uniões encapsuladas e uniões nãocapsuladas. A união encapsulada é compatível com implementações anteriores do RPC (NCA versão 1). A união não encapsulada elimina algumas das restrições da união encapsulada e fornece um discriminador mais visível do que a união encapsulada.

A união encapsulada é identificada pela opção palavra-chave e pela ausência de outras palavras-chave relacionadas à união.

A união não correspondente, também conhecida como união, é identificada pela presença das palavras-chave [switch_is] e [switch_type] , que identificam o discriminador e seu tipo.

Ao usar uniões [in, out] , lembre-se de que alterar o valor da troca de união durante a chamada pode fazer com que a chamada remota se comporte de forma diferente de uma chamada local. No retorno, os stubs copiam o parâmetro [in, out] na memória que já está presente no cliente. Quando o procedimento remoto modifica o valor da opção union e, consequentemente, altera o tamanho do objeto de dados, os stubs podem substituir a memória válida pelo valor [out] . Quando a opção união altera o objeto de dados de um tipo base para um tipo de ponteiro, os stubs podem substituir a memória válida quando copiam o referenciante de ponteiro para o local de memória indicado pelo valor [in] de um tipo base.

A forma de uniões deve ser idêntica entre plataformas para garantir a interconectividade.

Confira também

Uniões Encapsuladas

Arquivo IDL (definição de interface)

Em

Uniões NãoCapsuladas

out

switch_is

switch_type