Atribut wire_marshal
Atribut [ wire_marshal] adalah atribut jenis IDL yang mirip dalam sintaks dengan [ transmit_as], tetapi menyediakan cara yang lebih efisien untuk marshal data di seluruh jaringan.
Anda menggunakan atribut [wire_marshal] untuk menentukan jenis data yang akan dikirimkan sebagai pengganti jenis data khusus aplikasi. Setiap jenis khusus aplikasi memiliki jenis yang dapat ditransmisikan yang sesuai yang menentukan representasi kawat (representasi yang digunakan pada jaringan). Jenis khusus aplikasi tidak perlu ditransmisikan, tetapi harus merupakan jenis yang dikenali MIDL. Untuk membuat marshal jenis yang tidak diketahui oleh MIDL, gunakan atribut ACF [ user_marshal].
Jenis khusus aplikasi Anda bisa menjadi jenis sederhana, komposit, atau penunjuk. Pembatasan utama adalah bahwa instans jenis harus memiliki ukuran memori tetap dan terdefinisi dengan baik. Jika ukuran instans jenis Anda perlu diubah, gunakan bidang penunjuk daripada array yang sesuai. Atau, Anda dapat menentukan penunjuk ke jenis yang dapat diubah.
Anda harus menyediakan rutinitas untuk ukuran, marshaling, dan membatalkan nama data serta membebaskan memori terkait. Tabel berikut ini menjelaskan empat nama rutin yang disediakan pengguna. Jenis <> adalah jenis userm yang ditentukan dalam definisi jenis [wire_marshal] .
Rutin | Deskripsi |
---|---|
>_UserSize jenis< | Mengukur buffer data RPC sebelum melakukan marshaling di sisi klien atau server. |
>_UserMarshal jenis< | Marshals data di sisi klien atau server. |
>_UserUnmarshal jenis< | Batalkan nama data di sisi klien atau server. |
>_UserFree jenis< | Membebaskan data di sisi server. |
Rutinitas yang disediakan programmer ini disediakan oleh klien atau aplikasi server berdasarkan atribut arah.
Jika parameter adalah [ dalam] saja, klien mengirimkan ke server. Klien memerlukan jenis>_UserSize <dan jenis>_UserMarshal fungsi<. Server memerlukan jenis>_UserUnmarshal <, dan jenis <fungsi>_UserFree.
Untuk parameter [keluar]-only, server mengirimkan ke klien. Server memerlukan>_UserSize jenis<dan fungsi>_UserMarshal jenis<, sementara klien memerlukan fungsi>_UserMarshal jenis<.
Topik terkait
-
Aturan Marshaling untuk user_marshal dan wire_marshal