Bagikan melalui


Fungsi type_UserSize

Fungsi <type>_UserSize 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 dikirimkan 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 yang tidak ditandatangani . Kata atas bendera berisi bendera format NDR seperti yang didefinisikan oleh OSF DCE untuk titik mengambang, urutan byte, dan representasi karakter. Kata yang lebih rendah berisi bendera konteks marshaling seperti yang didefinisikan oleh saluran COM. Tata letak bendera yang tepat di 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 marsekal 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 marsekal dan nilainya didefinisikan dalam file Wtypes.h dan Wtypes.idl dalam Kit Pengembangan Perangkat Lunak Platform (SDK).

Catatan

Ketika jenis kawat didefinisikan dengan benar, Anda tidak perlu menggunakan bendera format NDR, karena mesin NDR melakukan konversi yang diperlukan.

 

Parameter StartingSize adalah offset buffer saat ini. Ukuran awal menunjukkan offset buffer untuk objek pengguna, dan mungkin atau mungkin tidak diselaraskan dengan benar. Rutinitas Anda harus mempertangungjawabkan 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.

Fungsi <type>_UserSize dapat mengembalikan overestimate dari ukuran yang diperlukan. Ukuran aktual buffer yang dikirim ditentukan oleh ukuran data, bukan oleh ukuran alokasi buffer.

Fungsi <type>_UserSize tidak dipanggil jika ukuran kawat dapat dikomputasi pada waktu kompilasi. Perhatikan bahwa untuk sebagian besar serikat pekerja, bahkan jika tidak ada pointer, ukuran sebenarnya dari representasi kawat hanya dapat ditentukan pada durasi.

Aturan marshaling untuk user_marshal dan wire_marshal

user_marshal

wire_marshal