atribut switch_is

Atribut [switch_is] menentukan ekspresi atau pengidentifikasi yang bertindak sebagai diskriminan serikat pekerja yang memilih anggota serikat pekerja.

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]]
    , ...);

Parameter

struct-tag

Menentukan tag opsional untuk struktur.

limited-expr

Menentukan ekspresi bahasa C yang didukung oleh MIDL. Hampir semua ekspresi bahasa C didukung. Kompilator MIDL mendukung ekspresi kondisional, ekspresi logis, ekspresi relasional, dan ekspresi aritmatika. MIDL tidak mengizinkan pemanggilan fungsi dalam ekspresi dan tidak mengizinkan operator pra-dan pasca-kenaikan dan pra-dan pasca-penurunan.

field-attr-list

Menentukan atribut bidang nol atau lebih yang berlaku untuk anggota serikat. Atribut bidang yang valid meliputi [first_is], [last_is], [length_is], [max_is], [size_is]; atribut penggunaan [string], [ignore], dan [context_handle]; atribut pointer [ref], [unique], atau [ptr]; dan untuk anggota yang mereka sendiri adalah serikat, atribut union [switch_type]. Pisahkan beberapa atribut bidang dengan koma.

union-type-specifier

Menentukan pengidentifikasi jenis union . Spesifikasi penyimpanan opsional dapat mendahului penentu jenis.

deklarator dan daftar deklarator

Menentukan deklarator C standar, seperti pengidentifikasi, deklarator penunjuk, dan deklarator array. (Deklarasi fungsi dan deklarasi bit-field tidak diizinkan dalam serikat yang dikirimkan dalam panggilan prosedur jarak jauh. Deklarator ini diperbolehkan dalam serikat yang tidak ditransmisikan.) Pisahkan beberapa deklarator dengan koma.

function-attribute-list

Menentukan atribut nol atau lebih yang berlaku untuk fungsi. Atribut fungsi yang valid adalah [callback], [local]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [string], [abaikan], dan [context_handle].

type-specifier

Menentukan jenis dasar, struct, union, enum type, atau type identifier. Spesifikasi penyimpanan opsional dapat mendahului penentu jenis.

deklarator penunjuk

Menentukan nol atau lebih deklarator penunjuk. Deklarator pointer sama dengan deklarator penunjuk yang digunakan dalam C; ini dibangun dari penunjuk * , pengubah seperti jauh, dan konsekuensi kualifikasi.

nama fungsi

Menentukan nama prosedur jarak jauh.

param-attr-list

Menentukan nol atau beberapa atribut yang sesuai untuk jenis parameter yang ditentukan. Atribut parameter dapat mengambil atribut arah [in] dan [out], atribut bidang [first_is], [last_is], [length_is], [max_is], [size_is], dan [switch_type]; atribut pointer [ref], [unique], atau [ptr]; dan atribut penggunaan [context_handle] dan [string]. Atribut penggunaan [abaikan] tidak dapat digunakan sebagai atribut parameter. Pisahkan beberapa atribut dengan koma.

tipe-union

Mengidentifikasi penentu jenis union .

Keterangan

Diskriminan yang terkait dengan atribut [switch_is] harus didefinisikan pada tingkat logis yang sama dengan gabungan:

  • Ketika penyatuan adalah parameter, penyatuan diskriminan harus menjadi parameter lain.
  • Ketika penyatuan adalah bidang struktur, diskriminan harus bidang lain dari struktur yang sama.

Urutan dalam struktur atau daftar parameter fungsi tidak signifikan. Serikat dapat mendahului atau mengikuti diskriminan.

Atribut [switch_is] dapat muncul sebagai atribut bidang atau sebagai atribut parameter.

Contoh

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;

Lihat juga

Jenis Dasar MIDL

Callback

const

context_handle

Serikat Terenkapsulasi

Enum

first_is

Mengabaikan

last_is

length_is

Lokal

max_is

Serikat Tidak Terenkapulatasi

Ptr

Ref

size_is

string

struktur

switch_type

union

Unik