Atribut Array dan Sized-Pointer

MIDL menyediakan serangkaian fitur yang kaya untuk meneruskan array data dan pointer ke data. Anda dapat menggunakan atribut ini untuk menentukan karakteristik array dan beberapa tingkat pointer.

Atribut Penggunaan
size_is Menentukan jumlah memori yang akan dialokasikan untuk penunjuk berukuran, pointer berukuran ke penunjuk berukuran, dan array tunggal atau multidimensi.
max_is Nilai maksimum untuk indeks array.
length_is Jumlah elemen array yang akan ditransmisikan.
first_is Indeks elemen array pertama yang akan ditransmisikan.
last_is Memberikan indeks elemen array terakhir yang akan ditransmisikan.
string Menunjukkan bahwa array karakter satu dimensi, wchar_t, byte (atau setara), atau penunjuk ke array tersebut, akan ditangani sebagai string.
Berbagai Menentukan rentang nilai yang diperbolehkan untuk argumen atau bidang yang nilainya diatur saat runtime.

 

MIDL mendukung tiga jenis pointer: penunjuk referensi, pointer unik, dan pointer penuh. Pointer ini ditentukan oleh atribut pointer ref, unique, dan ptr.

Atribut pointer dapat diterapkan sebagai atribut jenis; sebagai atribut bidang yang berlaku untuk anggota struktur, anggota serikat, atau parameter; atau sebagai atribut fungsi yang berlaku untuk jenis pengembalian fungsi. Atribut pointer juga dapat muncul dengan kata kunci pointer_default .

Untuk mengizinkan parameter pointer berubah nilai selama fungsi jarak jauh, Anda harus memberikan tingkat tidak langsung lain dengan menyediakan beberapa deklarator pointer. Atribut pointer eksplisit yang diterapkan ke parameter hanya memengaruhi deklarator pointer paling kanan untuk parameter . Ketika ada beberapa deklarator pointer dalam deklarasi parameter, deklarasi lainnya default ke atribut pointer yang ditentukan oleh atribut pointer_default . Untuk menerapkan atribut pointer yang berbeda ke beberapa deklarator pointer, Anda harus menentukan jenis perantara yang menentukan atribut pointer eksplisit.

Nilai Pointer-Attribute Default

Ketika tidak ada atribut pointer yang dikaitkan dengan pointer yang merupakan parameter, pointer diasumsikan sebagai penunjuk ref .

Ketika tidak ada atribut pointer yang dikaitkan dengan pointer yang merupakan anggota struktur atau gabungan, pengkompilasi MIDL menetapkan atribut pointer menggunakan aturan prioritas berikut (1 tertinggi):

  1. Atribut secara eksplisit diterapkan ke jenis penunjuk
  2. Atribut yang diterapkan secara eksplisit ke parameter pointer atau anggota
  3. Atribut pointer_default dalam file IDL yang menentukan jenis
  4. Atribut pointer_default dalam file IDL yang mengimpor jenis
  5. ptr (mode osf); unik (mode default Microsoft RPC)

Ketika file IDL dikompilasi dalam mode default, file yang diimpor dapat mewarisi atribut pointer dari mengimpor file. Fitur ini tidak tersedia saat Anda mengkompilasi menggunakan sakelar /osf . Untuk informasi selengkapnya, lihat mengimpor.

Jenis Pengembalian Fungsi

Penunjuk yang dikembalikan oleh fungsi harus merupakan penunjuk unik atau penunjuk penuh. Pengkompilasi MIDL melaporkan kesalahan jika hasil fungsi adalah penunjuk referensi, baik secara eksplisit atau secara default. Pointer yang dikembalikan selalu menunjukkan penyimpanan baru.

Fungsi yang mengembalikan nilai penunjuk dapat menentukan atribut penunjuk sebagai atribut fungsi. Jika atribut pointer tidak ada, pointer hasil fungsi menggunakan nilai yang disediakan sebagai atribut pointer_default .

Atribut Penunjuk dalam Definisi Jenis

Saat Anda menentukan atribut penunjuk di tingkat atas pernyataan typedef , atribut yang ditentukan diterapkan ke deklarator penunjuk, seperti yang diharapkan. Ketika tidak ada atribut penunjuk yang ditentukan, deklarator penunjuk di tingkat atas pernyataan typedef mewarisi jenis atribut penunjuk saat digunakan.

DCE IDL tidak mengizinkan atribut pointer yang sama diterapkan secara eksplisit dua kali—misalnya, dalam deklarasi typedef dan daftar atribut parameter. Saat Anda menggunakan mode default (ekstensi Microsoft) dari pengkompilasi MIDL, batasan ini dilonggarkan.

Untuk diskusi tentang menggunakan array dan pointer MIDL dalam panggilan prosedur jarak jauh, lihat Array dan Pointer.