attribut union

La mot clé syndicale apparaît dans les fonctions qui se rapportent aux syndicats discriminés.

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

Paramètres

type-attribute-list

Spécifie zéro ou plusieurs attributs qui s’appliquent au type d’union. Les attributs de type valides incluent [handle], [transmit_as]; l’attribut de pointeur [unique] ou [ptr]; et les attributs d’utilisation [context_handle] et [ignore]. Les unions encapsulées peuvent également avoir l’attribut de type pointeur [ref]. Séparez plusieurs attributs par des virgules.

struct-name

Spécifie une balise facultative qui nomme la structure générée par le compilateur MIDL.

switch-type

Spécifie un type int, char, enum ou un identificateur qui est résolu en l’un de ces types.

switch-name

Spécifie le nom de la variable de type switch-type qui joue le rôle de discriminant d’union.

union-name

Spécifie un identificateur facultatif qui nomme l’union dans la structure, générée par le compilateur MIDL, qui contient l’union et le discriminant.

C-style-case-list

Liste de « caseconst-expr : »

limited-expression-list

Spécifie une ou plusieurs expressions en langage C. Le compilateur MIDL prend en charge les expressions conditionnelles, les expressions logiques, les expressions relationnelles et les expressions arithmétiques. MIDL n’autorise pas les appels de fonction dans les expressions et n’autorise pas les opérateurs d’incrémentation et de décrémentation. Les expressions individuelles de la liste doivent être séparées par une virgule.

field-attribute-list

Spécifie zéro ou plusieurs attributs de champ qui s’appliquent au membre de l’union. Les attributs de champ valides incluent [first_is],[last_is], [length_is], [max_is], [size_is]; les attributs d’utilisation [string], [ignore] et [context_handle] ; l’attribut pointeur [unique] ou [ptr]; et, pour les membres qui ne sont pas des unions encapsulées, l’attribut union [switch_type]. Les unions non encapsulées peuvent également utiliser l’attribut de champ pointeur [ref]. Séparez plusieurs attributs de champ par des virgules.

type-specifier

Spécifie un type de base, un struct, une union, un type enum ou un identificateur de type. Une spécification de stockage facultative peut précéder le spécificateur de type.

declarator-list

Un ou plusieurs déclarateurs C standard, tels que des identificateurs, des déclarateurs de pointeurs et des déclarateurs de tableau. (Les déclarateurs de fonction et les déclarations de champ binaire ne sont pas autorisés dans les unions transmises dans les appels de procédure distante. Sauf lorsque vous utilisez le commutateur du compilateur MIDL /osf, ces déclarateurs sont autorisés dans les unions qui ne sont pas transmises.) Séparez plusieurs déclarateurs par des virgules.

étiquette

Spécifie une balise facultative.

Notes

MIDL prend en charge deux types d’unions discriminées : les unions encapsulées et lesunions non encapsulées. L’union encapsulée est compatible avec les implémentations précédentes de RPC (NCA version 1). L’union non encapsulée élimine certaines restrictions de l’union encapsulée et fournit un discriminant plus visible que l’union encapsulée.

L’union encapsulée est identifiée par le commutateur mot clé et l’absence d’autres mots clés liés à l’union.

L’union non-encapsulée, également appelée union, est identifiée par la présence des mots clés [switch_is] et [switch_type], qui identifient le discriminant et son type.

Lorsque vous utilisez des unions [in, out], sachez que la modification de la valeur du changement d’union pendant l’appel peut faire en sorte que l’appel distant se comporte différemment d’un appel local. Au retour, les stubs copient le paramètre [in, out] dans la mémoire déjà présente sur le client. Lorsque la procédure distante modifie la valeur du commutateur d’union et, par conséquent, modifie la taille de l’objet de données, les stubs peuvent remplacer la mémoire valide par la valeur [out]. Lorsque le commutateur union remplace l’objet de données d’un type de base par un type pointeur, les stubs peuvent remplacer la mémoire valide lorsqu’ils copient le référenceur de pointeur dans l’emplacement de mémoire indiqué par la valeur [in] d’un type de base.

La forme des unions doit être identique d’une plateforme à l’autre pour garantir l’interconnectivité.

Voir aussi

Unions encapsulées

Fichier de définition d’interface (IDL)

Dans

Unions non encapsulées

out

switch_is

switch_type