Bagikan melalui


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 penunjuk.

Atribut Penggunaan
size_is Menentukan jumlah memori yang akan dialokasikan untuk penunjuk berukuran, penunjuk 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 karakter karakter satu dimensi, wchar_t, byte (atau setara), atau penunjuk ke array tersebut, akan ditangani sebagai string.
rentang Menentukan rentang nilai yang diperbolehkan untuk argumen atau bidang yang nilainya diatur pada runtime.

 

MIDL mendukung tiga jenis pointer: penunjuk referensi, pointer unik, dan pointer penuh. Pointer ini ditentukan oleh atribut pointer ref, unik , 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 penunjuk mengubah 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, deklarator lain 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 ref pointer.

Ketika tidak ada atribut pointer yang dikaitkan dengan pointer yang merupakan anggota struktur atau union, kompilator 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 penunjuk 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 sakelarosf /. Untuk informasi selengkapnya, lihat mengimpor.

Tipe Pengembalian Fungsi

Penunjuk yang dikembalikan oleh fungsi harus berupa penunjukunikatau penunjuk penuh. Pengkompilasi MIDL melaporkan kesalahan jika hasil fungsi adalah penunjuk referensi, baik secara eksplisit atau secara default. Penunjuk 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 Pointer dalam Definisi Jenis

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

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

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