Serialisasi Inkremental
Saat menggunakan serialisasi gaya inkremental, Anda menyediakan tiga rutinitas untuk memanipulasi buffer. Rutinitas ini adalah: Alokasi, Baca, dan Tulis. Rutinitas Alokasi mengalokasikan buffer dengan ukuran yang diperlukan. Rutinitas Tulis menulis data ke dalam buffer, dan rutinitas Baca mengambil buffer yang berisi data marshal. Satu panggilan serialisasi dapat melakukan beberapa panggilan ke rutinitas ini.
Gaya serialisasi inkremental menggunakan rutinitas berikut:
- MesEncodeIncrementalHandleBuat
- MesDecodeIncrementalHandleBuat
- MesIncrementalHandleReset
- MesHandleFree
Prototipe untuk fungsi Alokasi, Baca, dan Tulis yang harus Anda sediakan ditunjukkan di bawah ini:
void __RPC_USER Alloc (
void *State, /* application-defined pointer */
char **pBuffer, /* returns pointer to allocated buffer */
unsigned int *pSize); /* inputs requested bytes; outputs
/* pBuffer size */
void __RPC_USER Write (
void *State, /* application-defined pointer */
char *Buffer, /* buffer with serialized data */
unsigned int Size); /* number of bytes to write from Buffer */
void __RPC_USER Read (
void *State, /* application-defined pointer */
char **pBuffer, /* returned pointer to buffer with data */
unsigned int *pSize); /* number of bytes to read into pBuffer */
Status memasukkan parameter untuk ketiga fungsi adalah penunjuk yang ditentukan aplikasi yang terkait dengan handel layanan pengodean. Aplikasi dapat menggunakan penunjuk ini untuk mengakses struktur yang berisi informasi khusus aplikasi, seperti handel file atau penunjuk aliran. Perhatikan bahwa stub tidak memodifikasi pointer Status selain meneruskannya ke fungsi Alokasi, Baca, dan Tulis. Selama pengodean, Alokasi dipanggil untuk mendapatkan buffer tempat data diserialisasikan. Kemudian, Tulis dipanggil untuk mengaktifkan aplikasi untuk mengontrol kapan dan di mana data berseri disimpan. Selama decoding, Read dipanggil untuk mengembalikan jumlah byte data berseri yang diminta dari tempat aplikasi menyimpannya.
Fitur penting dari gaya inkremental adalah bahwa handel menyimpan penunjuk status untuk Anda. Penunjuk ini mempertahankan status dan tidak pernah disentuh oleh fungsi RPC, kecuali saat meneruskan penunjuk ke fungsi Alokasi, Tulis, atau Baca. Handel ini juga mempertahankan status internal yang memungkinkan untuk mengodekan dan mendekode beberapa instans jenis ke buffer yang sama dengan menambahkan padding sesuai kebutuhan untuk penyelarasan. FungsiMesIncrementalHandleReset mengatur ulang handel ke status awal untuk mengaktifkan pembacaan atau penulisan dari awal buffer.
Fungsi Alokasi dan Tulis, bersama dengan penunjuk yang ditentukan aplikasi, dikaitkan dengan handel layanan pengodean dengan panggilan ke fungsi MesEncodeIncrementalHandleCreate. MesEncodeIncrementalHandleCreate mengalokasikan memori yang diperlukan untuk handel lalu menginisialisasinya.
Aplikasi ini dapat memanggil MesDecodeIncrementalHandleCreate untuk membuat handel decoding, MesIncrementalHandleReset untuk menginisialisasi ulang handel, atau MesHandleFree untuk membebaskan memori handel. Fungsi Baca, bersama dengan parameter yang ditentukan aplikasi, dikaitkan dengan handel decoding dengan panggilan ke MesDecodeIncrementalHandleCreate rutin. Fungsi ini membuat handel dan menginisialisasinya.
Parameter UserState, Alloc, Write, dan Read MesIncrementalHandleReset dapat null untuk menunjukkan tidak ada perubahan.