Jenis Serialisasi
Pengkompilasi MIDL menghasilkan hingga tiga fungsi untuk setiap jenis di mana atribut [ encode] atau [ dekode] diterapkan. Misalnya, untuk jenis yang ditentukan pengguna bernama MyType, pengkompilasi menghasilkan kode untuk fungsi MyType_Encode, MyType_Decode, dan MyType_AlignSize. Untuk fungsi-fungsi ini, pengkompilasi menulis prototipe ke Stub.h dan kode sumber ke Stub_c.c. Umumnya, Anda dapat mengodekan objek MyType dengan MyType_Encode dan mendekode objek dari buffer menggunakan MyType_Decode. MyType_AlignSize digunakan jika Anda perlu mengetahui ukuran buffer marshaling sebelum mengalokasikannya.
Fungsi pengodean berikut dihasilkan oleh pengkompilasi MIDL. Fungsi ini menserialisasikan data untuk objek yang ditunjukkan oleh pObject, dan buffer diperoleh sesuai dengan metode yang ditentukan dalam handel. Setelah menulis data berseri ke buffer, Anda mengontrol buffer. Perhatikan bahwa handel mewarisi status dari panggilan sebelumnya, dan buffer harus diratakan pada 8.
Untuk handel implisit:
void MyType_Encode (MyType __RPC_FAR * pObject);
Untuk handel eksplisit:
void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);
Fungsi berikut mendeserialisasi data dari penyimpanan aplikasi ke dalam objek yang ditunjukkan oleh pObject. Anda menyediakan buffer marshal sesuai dengan metode yang ditentukan dalam handel. Perhatikan bahwa handel dapat mewarisi status dari panggilan sebelumnya dan buffer harus diratakan pada 8.
Untuk handel implisit:
void MyType_Decode (MyType __RPC_FAR * pObject);
Untuk handel eksplisit:
void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);
Fungsi berikut mengembalikan ukuran, dalam byte, yang mencakup instans jenis ditambah byte padding apa pun yang diperlukan untuk menyelaraskan data. Ini memungkinkan serialisasi sekumpulan instans dengan jenis yang sama atau berbeda ke dalam buffer sambil memastikan bahwa data untuk setiap objek diselaraskan dengan tepat. MyType_AlignSize mengasumsikan bahwa instans yang diarahkan oleh pObject akan dinaungi menjadi buffer yang dimulai pada offset yang selaras pada 8.
Untuk handel implisit:
size_t MyType_AlignSize (MyType __RPC_FAR * pObject);
Untuk handel eksplisit:
size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);
Perhatikan bahwa kedua prosedur jarak jauh dengan handel pengikatan implisit dan jenis berseri dengan handel serialisasi implisit menggunakan variabel handel global yang sama. Oleh karena itu, disarankan untuk tidak mencampur serialisasi jenis dan prosedur jarak jauh dalam antarmuka dengan handel implisit. Untuk detailnya, lihat Implisit Versus Explicit Handles.