Bagikan melalui


Tiga Jenis Penunjuk

MIDL mendukung tiga jenis pointer untuk mengakomodasi berbagai aplikasi. Tiga tingkat yang berbeda disebut referensi, unik, dan penunjuk penuh, dan masing-masing ditunjukkan oleh atribut [ref], [unik], dan [ptr]. Kelas pointer yang dijelaskan oleh atribut ini saling eksklusif. Atribut penunjuk dapat diterapkan ke penunjuk dalam definisi jenis, jenis pengembalian fungsi, parameter fungsi, anggota struktur atau serikat, atau elemen array.

Pointer yang disematkan adalah pointer yang merupakan anggota struktur atau serikat pekerja. Mereka juga bisa menjadi elemen array. Ke arah [in] , pointer [ref] yang disematkan diasumsikan menunjuk ke penyimpanan yang valid dan tidak boleh null. Situasi ini berlaku secara rekursif untuk setiap pointer [ref] yang mereka arahkan. Ke arah [in ], penunjuk penuh dan [unik] yang disematkan (pointer dengan atribut [ptr] ) mungkin atau mungkin tidak null.

Atribut pointer apa pun yang ditempatkan pada parameter dalam sintaks deklarasi fungsi hanya memengaruhi deklarator penunjuk paling kanan untuk parameter tersebut. Untuk memengaruhi deklarator pointer lainnya, jenis bernama perantara harus digunakan.

Fungsi yang mengembalikan penunjuk dapat memiliki atribut penunjuk sebagai atribut fungsi. Atribut [unik] dan [ptr] harus diterapkan ke jenis pengembalian fungsi. Deklarasi anggota yang merupakan pointer dapat menentukan atribut pointer sebagai atribut bidang. Atribut pointer juga dapat diterapkan sebagai atribut jenis dalam konstruksi typedef .

Ketika tidak ada atribut pointer yang ditentukan sebagai atribut bidang atau jenis, atribut penunjuk diterapkan sesuai dengan aturan untuk deklarasi pointer yang tidak terpikat sebagai berikut.

Dalam mode kompatibilitas DCE, atribut pointer ditentukan dalam file IDL yang menentukan. Jika ada atribut [pointer_default**]**yang ditentukan dalam antarmuka yang menentukan, atribut tersebut digunakan. Jika tidak ada atribut [pointer_default] yang ada, semua penunjuk yang tidak ditepis adalah penunjuk penuh.

Dalam mode ekstensi Microsoft, atribut pointer dapat ditentukan dengan mengimpor file IDL dan diterapkan dalam urutan berikut:

  1. Atribut penunjuk eksplisit diterapkan di situs penggunaan.
  2. Atribut [ref ], ketika penunjuk yang tidak dicoba adalah parameter penunjuk tingkat atas.
  3. Atribut [pointer_default] yang ditentukan dalam antarmuka yang menentukan.
  4. Atribut [pointer_default] yang ditentukan dalam antarmuka dasar.
  5. Atribut [unik ].

Atribut antarmuka [pointer_default] menentukan atribut pointer default yang akan diterapkan ke deklarator pointer dalam deklarasi jenis, parameter, atau jenis pengembalian ketika deklarasi tersebut tidak memiliki atribut pointer eksplisit yang diterapkan padanya. Atribut antarmuka [pointer_default] tidak berlaku untuk penunjuk tingkat atas parameter yang tidak terjaga, yang diasumsikan sebagai [ref].