atribut byte_count

Atribut ACF [byte_count] adalah atribut parameter yang mengaitkan ukuran, dalam byte, dengan area memori yang ditunjukkan oleh penunjuk.

[ function-attribute-list ] function-name(
    [byte_count(length-variable-name)] parameter-name);
    ...);

Parameter

function-attribute-list

Menentukan nol atau lebih atribut fungsi ACF.

nama fungsi

Menentukan nama fungsi yang ditentukan dalam file IDL. Nama fungsi diperlukan.

nama variabel panjang

Menentukan nama parameter [in]-only yang menentukan ukuran, dalam byte, dari area memori yang dirujuk oleh parameter-name.

Nama parameter

Menentukan nama parameter penunjuk [out]-only yang ditentukan dalam file IDL.

Keterangan

Atribut ACF [byte_count] mewakili ekstensi Microsoft ke DCE IDL. Oleh karena itu, atribut ini tidak tersedia saat Anda menggunakan sakelar kompilator MIDL /osf.

Catatan

Atribut [byte count] tidak lagi didukung dalam sintaks NDR64 karena kesulitan memperkirakan ukuran yang diperlukan untuk semua parameter [out ].

 

Memori yang dirujuk oleh parameter pointer berdekatan dan tidak dialokasikan atau dikosongkan oleh potong klien. Fitur atribut [byte_count] ini memungkinkan Anda membuat area buffer persisten di memori klien yang dapat digunakan kembali selama lebih dari satu panggilan ke prosedur jarak jauh.

Kemampuan untuk mematikan alokasi memori stub klien memungkinkan Anda menyempurnakan aplikasi untuk efisiensi. Misalnya, atribut [byte_count] dapat digunakan oleh fungsi penyedia layanan yang menggunakan Microsoft RPC. Saat aplikasi pengguna memanggil API penyedia layanan dan mengirim pointer ke buffer, penyedia layanan dapat meneruskan penunjuk buffer ke fungsi jarak jauh. Penyedia layanan dapat menggunakan kembali buffer selama beberapa panggilan jarak jauh tanpa memaksa pengguna untuk mengalokasikan kembali area memori.

Area memori dapat berisi struktur data kompleks yang terdiri dari beberapa pointer. Karena area memori berdampingan, aplikasi tidak perlu melakukan beberapa panggilan untuk membebaskan setiap pointer dan struktur secara individual. Sebaliknya, ia dapat mengalokasikan atau membebaskan area memori dengan satu panggilan ke alokasi memori atau rutinitas gratis.

Buffer harus berupa parameter [out]-only, sedangkan panjang buffer dalam byte harus berupa parameter [in]-only.

Tentukan buffer yang cukup besar untuk berisi semua parameter [out ]. Karena padding tersembunyi, gunakan overestimate daripada jumlah yang tepat. Misalnya, pointer 4-byte tidak dinamai pada batas selaras 4-byte pada platform 32-bit dan pointer 8-byte pada batas 8-byte pada platform 64-bit. Oleh karena itu, penyelarasan padding rintik akan dilakukan harus dipertimbangan di ruang untuk buffer. Selain itu, tingkat pengemasan yang digunakan selama kompilasi bahasa C dapat bervariasi. Gunakan nilai jumlah byte yang memperhitungkan byte pengemasan tambahan yang ditambahkan untuk tingkat pengemasan yang digunakan selama kompilasi bahasa C. Praktik aman yang mencakup platform 32 bit dan platform 64 bit adalah mengasumsikan bahwa setiap objek masuk ke blok memori besar dimulai pada alamat yang merupakan kelipatan 8.

Contoh

/* IDL file */ 
HRESULT proc1([in] unsigned long length, 
              [out] struct my_struct * pMyStruct); 
 
/* ACF file */ 
proc1([byte_count(length)] pMyStruct);

Lihat juga

File Konfigurasi Aplikasi (ACF)

In

length_is

/osf

Out ekspres

size_is