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 marshaled. Satu panggilan serialisasi dapat melakukan beberapa panggilan ke rutinitas ini.
Gaya serialisasi inkremental menggunakan rutinitas berikut:
- MesEncodeIncrementalHandleCreate
- MesDecodeIncrementalHandleCreate
- MesIncrementalHandleReset
- MesHandleFree
Prototipe untuk fungsi Alokasi, Baca, dan Tulis yang harus Anda berikan 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 penunjuk Status selain meneruskannya ke fungsi Alokasi, Baca, dan Tulis. Selama pengodean, Alloc dipanggil untuk mendapatkan buffer tempat data diserialisasikan. Kemudian, Tulis dipanggil untuk memungkinkan aplikasi mengontrol kapan dan di mana data berseri disimpan. Selama pendekodean, Read dipanggil untuk mengembalikan jumlah byte yang diminta dari data berseri dari tempat aplikasi menyimpannya.
Fitur penting dari gaya inkremental adalah bahwa handel menyimpan penunjuk status untuk Anda. Pointer ini mempertahankan status dan tidak pernah disentuh oleh fungsi RPC, kecuali saat meneruskan pointer ke fungsi Alloc, Write, atau Read. Handel ini juga mempertahankan status internal yang memungkinkan untuk mengodekan dan mendekode beberapa jenis instans ke buffer yang sama dengan menambahkan padding sesuai kebutuhan untuk penyelarasan. Fungsi MesIncrementalHandleReset mengatur ulang handel ke status awalnya 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 dan kemudian menginisialisasinya.
Aplikasi ini dapat memanggil MesDecodeIncrementalHandleCreate untuk membuat pegangan 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 rutinitas MesDecodeIncrementalHandleCreate . Fungsi ini membuat handel dan menginisialisasinya.
Parameter UserState, Alloc, Write, dan Read dari MesIncrementalHandleReset dapat berupa NULL untuk menunjukkan tidak ada perubahan.