Bagikan melalui


Buffer Application-Allocated

Atribut ACF [byte_count] mengarahkan rintisan untuk menggunakan buffer yang dialokasikan sebelumnya yang tidak dialokasikan atau dikosongkan oleh rutinitas dukungan klien. Atribut [byte_count] diterapkan ke parameter pointer atau array yang menunjuk ke buffer. Ini memerlukan parameter yang menentukan ukuran buffer dalam byte.

Area memori yang dialokasikan klien dapat berisi struktur data yang kompleks dengan beberapa pointer. Karena area memori berdampingan, aplikasi tidak perlu melakukan beberapa panggilan untuk membebaskan setiap pointer dan struktur satu per satu. Seperti saat menggunakan atribut [alokasikan(all_nodes)], area memori dapat dialokasikan atau dikosongkan dengan satu panggilan ke rutinitas alokasi memori atau rutinitas bebas. Namun, tidak seperti menggunakan atribut [alokasikan(all_nodes)], parameter buffer tidak dikelola oleh rintangan klien tetapi oleh aplikasi klien.

Buffer harus berupa parameter [out]-only dan panjang buffer dalam byte harus berupa parameter [in]-only. Atribut [byte_count] hanya dapat diterapkan ke jenis penunjuk. Atribut ACF [byte_count] adalah ekstensi Microsoft untuk DCE IDL dan, dengan demikian, tidak tersedia jika Anda mengkompilasi menggunakan sakelar MIDL /osf .

Dalam contoh berikut, parameter pRoot menggunakan jumlah byte:

/* function prototype in IDL file (fragment) */
void SortNames(
    [in] short cNames,
    [in, size_is(cNames)] STRINGTYPE pszArray[],
    [in] short cBytes,
    [out, ref] P_TREE_TYPE pRoot  /* tree with sorted data */
);

Atribut [byte_count] muncul di ACF sebagai:

/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);

Rintisan klien yang dihasilkan dari file IDL dan ACF ini tidak mengalokasikan atau membebaskan memori untuk buffer ini. Stub server mengalokasikan dan membebaskan buffer dalam satu panggilan menggunakan parameter ukuran yang disediakan. Jika data terlalu besar untuk ukuran buffer yang ditentukan, pengecualian akan dinaikkan.