Inkrementell serialisering
När du använder serialiseringen för inkrementell stil anger du tre rutiner för att ändra bufferten. Dessa rutiner är: Alloc, Read och Write. Alloc-rutinen allokerar en buffert av den storlek som krävs. Skrivrutinen skriver data till bufferten och read-rutinen hämtar en buffert som innehåller konverterade data. Ett enda serialiseringsanrop kan göra flera anrop till dessa rutiner.
Den inkrementella serialiseringen använder följande rutiner:
- MesEncodeIncrementalHandleSkapa
- MesDecodeIncrementalHandleSkapa
- MesIncrementalHandleReset
- MesHandleFree
De prototyper för funktionerna Alloc, Read och Write som du måste ange visas nedan:
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 */
State input a parameter for all three functions is the application-defined pointer that was associated with the encoding services handle.The State input a parameter for all three functions is the application-defined pointer that was associated with the encoding services handle. Programmet kan använda den här pekaren för att komma åt strukturen som innehåller programspecifik information, till exempel ett filhandtag eller en strömpekare. Observera att stubs inte ändrar tillståndspekaren annat än att skicka den till funktionerna Alloc, Read och Write. Under kodningen anropas Alloc för att hämta en buffert där data serialiseras. Sedan anropas Write för att göra det möjligt för programmet att styra när och var serialiserade data lagras. Under avkodningen anropas Read för att returnera det begärda antalet byte serialiserade data där programmet lagrade dem.
En viktig funktion i det inkrementella formatet är att handtaget behåller tillståndspekaren åt dig. Den här pekaren bibehåller tillståndet och berörs aldrig av RPC-funktionerna, förutom när pekaren skickas till funktionen Alloc, Write eller Read. Handtaget har också ett internt tillstånd som gör det möjligt att koda och avkoda flera typinstanser till samma buffert genom att lägga till utfyllnad efter behov för justering. Funktionen MesIncrementalHandleReset återställer ett handtag till dess ursprungliga tillstånd för att aktivera läsning eller skrivning från början av bufferten.
Funktionerna Alloc och Write, tillsammans med en programdefinierad pekare, är associerade med en kodningstjänstreferens av ett anrop till funktionen MesEncodeIncrementalHandleCreate. MesEncodeIncrementalHandleCreate allokerar det minne som behövs för handtaget och initierar det sedan.
Programmet kan anropa MesDecodeIncrementalHandleCreate för att skapa ett avkodningshandtag, MesIncrementalHandleReset för att initiera om handtaget eller MesHandleFree- för att frigöra handtagets minne. Funktionen Read, tillsammans med en programdefinierad parameter, är associerad med en avkodningsreferens av ett anrop till MesDecodeIncrementalHandleCreate rutin. Funktionen skapar handtaget och initierar det.
Parametrarna UserState, Alloc, Write och Read för MesIncrementalHandleReset kanNULL- för att indikera att ingen ändring har ändrats.