atribut length_is
Atribut [length_is] menentukan jumlah elemen array yang akan dikirimkan. Anda harus menentukan nilai non-negatif.
[length_is( limited-expression-list )]
Parameter
-
daftar ekspresi terbatas
-
Menentukan satu atau beberapa ekspresi bahasa C. Setiap ekspresi mengevaluasi ke bilangan bulat yang mewakili jumlah elemen array yang akan ditransmisikan. Kompilator MIDL mendukung ekspresi kondisional, ekspresi logis, ekspresi relasional, dan ekspresi aritmatika. MIDL tidak mengizinkan pemanggilan fungsi dalam ekspresi dan tidak memungkinkan operator kenaikan dan penurunan. Pisahkan beberapa ekspresi dengan koma.
Keterangan
Atribut [length_is] menentukan nilai indeks array yang sesuai dengan atribut [last_is] ketika [last_is] tidak ditentukan. Hubungan antara indeks array ini adalah sebagai berikut: panjang = terakhir - pertama + 1.
Atribut [length_is] tidak dapat digunakan pada saat yang sama dengan atribut [last_is]atau atribut[string].
Untuk menentukan string yang dihitung dengan atribut[length_is] atau [last_is], gunakan array karakter atau penunjuk tanpa atribut[string].
Menggunakan ekspresi konstanta dengan atribut [length_is] adalah penggunaan atribut yang tidak pantas. Ini legal, tetapi tidak efisien, dan akan menghasilkan kode marshaling yang lebih lambat.
Anda dapat menggunakan atribut [size_is] dan [length_is] bersama-sama. Saat Anda melakukannya, atribut [size_is] mengontrol jumlah memori yang dialokasikan untuk data. Atribut [length_is] menentukan berapa banyak elemen yang ditransmisikan. Jumlah memori yang ditentukan oleh atribut [size_is] dan [length_is] tidak perlu sama. Misalnya, klien Anda dapat meneruskan parameter [in, out] ke server dan menentukan alokasi memori besar dengan [size_is], meskipun menentukan sejumlah kecil elemen data yang akan diteruskan dengan [length_is]. Ini memungkinkan server untuk mengisi array dengan lebih banyak data daripada yang diterimanya, yang kemudian dapat dikirim kembali ke klien.
Secara umum, tidak berguna untuk menentukan parameter[size_is] dan [length_is] pada parameter [in] atau [out]. Dalam kedua kasus, [size_is] mengontrol alokasi memori. Aplikasi Anda dapat menggunakan [size_is] untuk mengalokasikan lebih banyak elemen array daripada yang dikirimkan (seperti yang ditentukan oleh [length_is]). Namun, ini tidak akan efisien. Juga tidak efisien untuk menentukan nilai yang identik untuk [size_is] dan [length_is]. Karena akan menciptakan overhead ekstra selama marshaling parameter. Ketika nilai [size_is] dan [length_is] selalu sama, hilangkan atribut [length_is ].
Contoh
/* counted string holding at most "size" characters */
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} COUNTED_STRING_TYPE;
/* counted string holding at most 80 characters */
typedef struct
{
unsigned short length;
[length_is(length)] char string[80];
} STATIC_COUNTED_STRING_TYPE;
HRESULT Proc1(
[in] short iLength;
[in, length_is(iLength)] short asNumbers[10]);
Lihat juga