Fungsi type_UserSize
Fungsi>_UserSize jenis<adalah fungsi pembantu untuk atribut [ wire_marshal] dan [ user_marshal] . Stub memanggil fungsi ini untuk mengukur buffer data RPC untuk objek data pengguna sebelum data dinamai di sisi klien atau server. Fungsi ini didefinisikan sebagai:
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
Jenis <> dalam nama fungsi berarti jenis pengguna, seperti yang ditentukan dalam definisi jenis [wire_marshal] atau [user_marshal]. Jenis ini mungkin tidak dapat ditransmisikan atau bahkan—saat digunakan dengan atribut [user_marshal]— tidak diketahui oleh pengkompilasi MIDL. Nama jenis kawat (nama jenis yang ditransmisikan di seluruh jaringan) tidak digunakan dalam prototipe fungsi. Namun, perhatikan bahwa jenis kawat menentukan tata letak untuk data seperti yang ditentukan oleh OSF DCE. Semua data harus dikonversi ke format representasi data jaringan (NDR).
Parameter pFlags adalah penunjuk ke bidang bendera panjang tidak ditandatangani. Kata atas bendera berisi bendera format NDR seperti yang didefinisikan oleh OSF DCE untuk representasi titik pecahan, urutan byte, dan karakter. Kata yang lebih rendah berisi bendera konteks marshaling seperti yang didefinisikan oleh saluran COM. Tata letak bendera yang tepat dalam bidang diperlihatkan dalam tabel berikut.
Bit | Bendera | Nilai |
---|---|---|
31-24 | Representasi floating-point | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
23-20 | Urutan byte bilangan bulat dan titik mengambang | 0 = Big-endian 1 = Little-endian |
19-16 | Representasi karakter | 0 = ASCII 1 = EBCDIC |
15-0 | Bendera konteks marshaling | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
Bendera konteks marshaling memungkinkan untuk mengubah perilaku rutinitas Anda tergantung pada konteks untuk panggilan RPC. Misalnya, jika Anda memiliki handel (panjang ) ke blok data, Anda dapat mengirim handel untuk panggilan dalam proses, tetapi Anda akan mengirim data aktual untuk panggilan ke komputer lain. Bendera konteks marshaling dan nilainya didefinisikan dalam file Wtypes.h dan Wtypes.idl dalam Platform Software Development Kit (SDK).
Nota
Ketika jenis kawat didefinisikan dengan benar, Anda tidak perlu menggunakan bendera format NDR, karena mesin NDR melakukan konversi yang diperlukan.
StartingSize parameter adalah offset buffer saat ini. Ukuran awal menunjukkan offset buffer untuk objek pengguna, dan mungkin atau mungkin tidak diselaraskan dengan benar. Rutinitas Anda harus memperhitungkan padding apa pun yang diperlukan.
Parameter pMyObj adalah penunjuk ke objek jenis pengguna.
Nilai yang dikembalikan adalah posisi offset atau buffer baru. Fungsi harus mengembalikan ukuran kumulatif, yang merupakan ukuran awal ditambah kemungkinan padding ditambah ukuran data.
Jenis <fungsi>_UserSize dapat mengembalikan overestimate dari ukuran yang diperlukan. Ukuran aktual buffer yang dikirim ditentukan oleh ukuran data, bukan oleh ukuran alokasi buffer.
Fungsi>_UserSize jenis<tidak dipanggil jika ukuran kawat dapat dikomputasi pada waktu kompilasi. Perhatikan bahwa untuk sebagian besar serikat pekerja, bahkan jika tidak ada penunjuk, ukuran aktual representasi kawat hanya dapat ditentukan pada waktu proses.
Topik terkait