Tiga Jenis Penunjuk
MIDL mendukung tiga jenis pointer untuk mengakomodasi berbagai aplikasi. Tiga tingkat berbeda disebut referensi, unik, dan penunjuk penuh, dan ditunjukkan oleh atribut [ref], [unik ], dan [ptr], masing-masing. 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. Dalam [ke arah], pointer [ref] yang disematkan diasumsikan menunjuk ke penyimpanan yang valid dan tidak boleh null. Situasi ini berlaku secara rekursif untuk setiap [ref] pointer yang mereka arahkan. Dalam arah , [unik] yang disematkan dan pointer penuh (pointer dengan atribut [ptr]) mungkin atau mungkin tidak null.
Atribut pointer apa pun yang ditempatkan pada parameter dalam sintaksis deklarasi fungsi hanya memengaruhi deklarator penunjuk paling kanan untuk parameter tersebut. Untuk memengaruhi deklarator pointer lainnya, jenis bernama menengah 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 penunjuk dapat menentukan atribut pointer sebagai atribut bidang. Atribut pointer juga dapat diterapkan sebagai atribut jenis dalam konstruksitypedef.
Ketika tidak ada atribut penunjuk yang ditentukan sebagai atribut bidang atau jenis, atribut pointer diterapkan sesuai dengan aturan untuk deklarasi pointer yang tidak di-tautkan 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], 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:
- Atribut pointer eksplisit diterapkan di situs penggunaan.
- Atribut [ref], ketika penunjuk yang tidak ditemui adalah parameter penunjuk tingkat atas.
- Atribut [pointer_default] yang ditentukan dalam antarmuka yang menentukan.
- Atribut [pointer_default] yang ditentukan dalam antarmuka dasar.
- Atribut [unik].
Atribut antarmuka [pointer_default] menentukan atribut pointer default yang akan diterapkan ke deklarator pointer dalam jenis, parameter, atau deklarasi jenis pengembalian ketika deklarasi tersebut tidak memiliki atribut pointer eksplisit yang diterapkan padanya. Atribut antarmuka [pointer_default] tidak berlaku untuk pointer tingkat atas parameter yang tidak dicopot, yang diasumsikan [ref].