atribut force_allocate
Atribut ACF [force_allocate] memaksa parameter pointer untuk dialokasikan menggunakan midl_user_allocate alih-alih mengoptimalkan alokasi.
[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ force_allocate [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);
Parameter
Atribut ini tidak memiliki parameter.
Keterangan
RPC mencoba meminimalkan alokasi memori di server dengan menyediakan pointer ke buffer memori internal. Pendekatan ini dapat menyebabkan masalah bagi aplikasi yang mencoba langsung memanggil midl_user_free pada pointer yang disediakan RPC, karena pointer yang telah dioptimalkan tidak dapat dibebaskan. Menandai parameter dengan [force_allocate] akan mencegah pengoptimalan ini untuk semua pointer yang mendapatkannya.
Penggunaan umum lainnya untuk [force_allocate] adalah menjamin keselarasan memori yang ditunjukkan jika aplikasi memerlukan perataan yang lebih besar dari memori yang ditunjukkan. Misalnya, aplikasi sering meneruskan data dalam array byte generik daripada menggunakan jenis aktual, tetapi byte hanya dijamin selaras pada 1, yang dapat menyebabkan masalah untuk aplikasi yang mengasumsikan keselarasan yang lebih besar. Dengan menandai parameter dengan [force_allocate], aplikasi dapat menjamin semua memori yang ditunjukkan akan memiliki perataan yang sama dengan yang dijamin oleh midl_user_allocate.
Contoh
/* IDL file */
void Func1([in, out, string] char **ppstr);
void Func2([in] long s, [in, size_is(s)] byte *pData);
/* ACF file */
/* e.g. The application wishes to call midl_user_free on *ppstr and supply a new pointer */
Func1([force_allocate] pstr);
/* e.g. pData really points to a structure that needs an alignment greater than 1 */
Func2([force_allocate] pData);
Lihat juga