switch_is (attributo)

L'attributo [switch_is] specifica l'espressione o l'identificatore che agisce come discriminante dell'unione che seleziona il membro dell'unione.

typedef struct [[ struct-tag ]] 
{
    [ switch_is(limited-expr) [[ , field-attr-list ]] ] union-type-specifier declarator;
    ...
}

[[ [function-attribute-list] ]] type-specifier [[pointer-declarator]] function-name(
    [ switch_is(limited-expr) [[ , param-attr-list ]] ] union-type [[declarator]]
    , ...);

Parametri

struct-tag

Specifica un tag facoltativo per una struttura.

expr limitato

Specifica un'espressione linguaggio C supportata da MIDL. Sono supportate quasi tutte le espressioni del linguaggio C. Il compilatore MIDL supporta espressioni condizionali, espressioni logiche, espressioni relazionali e espressioni aritmetiche. MIDL non consente chiamate di funzione nelle espressioni e non consente operatori pre-incrementi e post-incrementi e post-decrement.

field-attr-list

Specifica zero o più attributi di campo che si applicano a un membro dell'unione. Gli attributi di campo validi includono [first_is], [last_is], [length_is],[max_is], [size_is]; gli attributi di utilizzo [string], [ignore]e [context_handle]; attributo puntatore [ref], [unique]o [ptr]; e per i membri che si sono unioni, l'attributo unione [switch_type]. Separare più attributi di campo con virgole.

union-type-identificatore

Specifica l'identificatore del tipo di unione . Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.

dichiaratore e dichiaratore-list

Specifica un dichiaratore C standard, ad esempio un identificatore, un dichiaratore puntatore e un dichiaratore di matrice. Le dichiarazioni di funzione e le dichiarazioni di campo bit non sono consentite nelle unioni trasmesse nelle chiamate di procedura remota. Questi dichiaratori sono consentiti nelle unioni che non vengono trasmesse. Separare più dichiaratori con virgole.

function-attribute-list

Specifica zero o più attributi che si applicano alla funzione. Gli attributi di funzione validi sono [callback], [local]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string], [ignore]e [context_handle].

identificatore di tipo

Specifica un tipo di base, uno struct, un'unione, un tipo di enumerazione o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.

puntatore dichiaratore

Specifica zero o più dichiaratori puntatori. Un dichiaratore puntatore è lo stesso del dichiaratore puntatore usato in C; viene costruito dal designatore *, modificatori come la lontano e il qualificatore const.

nome funzione

Specifica il nome della routine remota.

param-attr-list

Specifica zero o più attributi appropriati per il tipo di parametro specificato. Gli attributi dei parametri possono accettare gli attributi direzionali [in] e [out], gli attributi del campo [first_is], [last_is], [length_is], [max_is], [size_is]e [switch_type]; attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [context_handle] e [string]. Impossibile usare l'attributo di utilizzo [ignore] come attributo di parametro. Separare più attributi con virgole.

tipo di unione

Identifica l'identificatore del tipo di unione .

Commenti

Il discriminante associato all'attributo [switch_is] deve essere definito allo stesso livello logico dell'unione:

  • Quando l'unione è un parametro, il discriminante dell'unione deve essere un altro parametro.
  • Quando l'unione è un campo di una struttura, il discriminante deve essere un altro campo della stessa struttura.

La sequenza in una struttura o un elenco di parametri di funzione non è significativa. L'unione può precedere o seguire la discriminazione.

L'attributo [switch_is] può essere visualizzato come attributo di campo o come attributo di parametro.

Esempi

typedef [switch_type(short)] union _WILLIE_UNION_TYPE 
{ 
    [case(24)] 
        float fMays; 
    [case(25)] 
        double dMcCovey; 
    [default] 
        ; 
} WILLIE_UNION_TYPE; 
 
typedef struct _WINNER_TYPE 
{ 
    [switch_is(sUniformNumber)] WILLIE_UNION_TYPE w; 
    short sUniformNumber; 
} WINNER_TYPE;

Vedere anche

Tipi di base MIDL

callback

const

context_handle

Unioni incapsulate

Enum

first_is

Ignorare

last_is

length_is

Locale

max_is

Unioni non incapsulate

Ptr

Ref

size_is

string

Struct

switch_type

Unione

Unico