Bagikan melalui


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.

aturan Marshaling untuk user_marshal dan wire_marshal

user_marshal

wire_marshal