atribut partial_ignore

Atribut ACF [partial_ignore] mendefinisikan versi khusus dari penunjuk [unik] yang menyediakan semantik opsional.

[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ partial_ignore [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);

Keterangan

Saat membuat fungsi, adalah umum untuk memungkinkan pengguna menentukan penunjuk non-NULL ke data pengembalian opsional, sering disebut sebagai penunjuk keluar opsional. Memori yang ditunjukkan oleh pengguna biasanya tidak diperlukan untuk diinisialisasi. Teknik ini mewakili masalah ketika fungsi digunakan melalui RPC.

Jika penunjuk keluar opsional valid, tetapi menunjuk ke data yang tidak diinisialisasi, RPC mencoba untuk marshal data tersebut dan mengirimkannya ke server, yang dapat menyebabkan marshaling gagal dan membatalkan panggilan. Bahkan jika marshaling berhasil, sejumlah besar data yang tidak berguna dikirim ke server.

Masalah ini diselesaikan dengan menandai pointer sebagai [in, out, unique, partial_ignore]. Keempat atribut harus ada. Ketika penunjuk [partial_ignore] dinamai di sisi klien, satu-satunya data yang dikirim ke server adalah indikator yang menunjukkan apakah penunjuk ADALAH NULL. Jika penunjuk bukan NULL, rutinitas sisi server menerima penunjuk yang valid ke blok memori yang telah diinisialisasi dengan nol. Jika penunjuk NULL, rutinitas sisi server menerima penunjuk NULL .

Dalam situasi ini, ukuran maksimum pointer harus didefinisikan dengan baik baik pada waktu kompilasi atau berdasarkan parameter input, karena server perlu mengalokasikan ruang untuk lokasi memori yang diarahkan. Misalnya, penunjuk [string] sederhana tidak memiliki ukuran yang ditentukan dengan baik karena string secara implisit dihentikan oleh karakter NULL. Dalam hal ini, menentukan ukuran maksimum string dengan menambahkan atribut [size_is] akan mencapai persyaratan ukuran yang ditentukan dengan baik.

Contoh

/* The MoveLeft function will move one position to the left and optionally return the previous position */
void MoveLeft([in, out, unique, partial_ignore] long *pPrevPosition);

Lihat juga

Unik