Növekményes szerializálás
A növekményes stílus szerializálásakor három rutint kell megadnia a puffer kezeléséhez. Ezek a rutinok a következők: Alloc, Read és Write. Az Alloc rutin lefoglalja a szükséges méretű puffert. Az írási rutin beírja az adatokat a pufferbe, az Olvasási rutin pedig egy olyan puffert kér le, amely a marsallált adatokat tartalmazza. Egyetlen szerializálási hívás több hívást is indíthat ezekhez a rutinokhoz.
A szerializálás növekményes stílusa a következő rutinokat használja:
- MesEncodeIncrementalHandleCreate
- MesDecodeIncrementalHandleCreate
- MesIncrementalHandleReset
- MesHandleFree
Az allok, olvasási és írási függvények prototípusai, amelyeket meg kell adnia, az alábbiakban láthatók:
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 */
Az Állapot bemenete paraméter mindhárom függvényhez az alkalmazás által definiált mutató, amely a kódolási szolgáltatások leírójával volt társítva. Az alkalmazás ezzel a mutatóval elérheti az alkalmazásspecifikus információkat tartalmazó struktúrát, például egy fájlkezelőt vagy egy streammutatót. Vegye figyelembe, hogy a csonkok nem módosítják az Állapot mutatót, csak az Alloc, az Olvasás és az Írás függvénynek való átadáshoz. A kódolás során az Alloc egy puffer beszerzésére van meghívva, amelybe az adatok szerializálva lesznek. Ezután a rendszer meghívja az írást, hogy az alkalmazás szabályozhassa a szerializált adatok tárolásának helyét és helyét. A dekódolás során az Olvasás parancs a kért számú szerializált adatot adja vissza, ahonnan az alkalmazás tárolta őket.
A növekményes stílus egyik fontos funkciója, hogy a fogópont megtartja az állapotmutatót. Ez a mutató fenntartja az állapotot, és az RPC-függvények soha nem érintik, kivéve, ha a mutatót az Alloc, Az Írás vagy az Olvasás függvénynek továbbítja. A fogópont egy belső állapotot is fenntart, amely lehetővé teszi több típuspéldány kódolását és dekódolását ugyanarra a pufferre az igazításhoz szükséges kitöltés hozzáadásával. A MesIncrementalHandleReset függvény alaphelyzetbe állít egy leírót a kezdeti állapotára, hogy lehetővé tegye az olvasást vagy írást a puffer elejétől.
Az Alloc és az Write függvény, valamint egy alkalmazás által definiált mutató a MesEncodeIncrementalHandleCreate függvény hívása által kezelt kódolási szolgáltatásokhoz van társítva. MesEncodeIncrementalHandleCreate lefoglalja a leíróhoz szükséges memóriát, majd inicializálja.
Az alkalmazás meghívhatja a MesDecodeIncrementalHandleCreate egy dekódoló fogópont létrehozásához, a MesIncrementalHandleReset a fogópont újraincializálásához, vagy a MesHandleFree a leíró memóriájának felszabadításához. Az Olvasás függvény és egy alkalmazás által definiált paraméter egy dekódoló leíróhoz van társítva a MesDecodeIncrementalHandleCreate rutin hívásával. A függvény létrehozza és inicializálja a leírót.
A MesIncrementalHandleReset UserState, Alloc, Write és Read paramétere NULL jelezheti a változást.