Delen via


Incrementele serialisatie

Wanneer u de serialisatie van incrementele stijlen gebruikt, levert u drie routines om de buffer te manipuleren. Deze routines zijn: Alloc, Lezen en Schrijven. De Alloc-routine wijst een buffer van de vereiste grootte toe. De schrijfroutine schrijft de gegevens naar de buffer en de leesroutine haalt een buffer op die marshaled gegevens bevat. Een enkele serialisatie-aanroep kan verschillende aanroepen naar deze routines doen.

De incrementele stijl van serialisatie maakt gebruik van de volgende routines:

De prototypen voor de functies Alloc, Lezen en Schrijven die u moet opgeven, worden hieronder weergegeven:

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 */

De statusinvoer van een parameter voor alle drie functies is de toepassingsgedefinieerde aanwijzer die is gekoppeld aan de handle van de coderingsservices. De toepassing kan deze aanwijzer gebruiken om toegang te krijgen tot de structuur met toepassingsspecifieke informatie, zoals een bestandsgreep of streampointer. Houd er rekening mee dat de stubs de aanwijzer voor status niet wijzigen om deze door te geven aan de functies Alloc, Lezen en Schrijven. Tijdens de codering wordt Alloc aangeroepen om een buffer te verkrijgen waarin de gegevens worden geserialiseerd. Vervolgens wordt Schrijven aangeroepen om de toepassing in staat te stellen te bepalen wanneer en waar de geserialiseerde gegevens worden opgeslagen. Tijdens de decodering wordt Read aangeroepen om het aangevraagde aantal bytes aan geserialiseerde gegevens te retourneren van waaruit de toepassing deze heeft opgeslagen.

Een belangrijk kenmerk van de incrementele stijl is dat de greep de statusaanwijzer voor u bewaart. Deze aanwijzer onderhoudt de status en wordt nooit aangeraakt door de RPC-functies, behalve wanneer de aanwijzer wordt doorgegeven aan de functie Alloc, Write of Read. De handle onderhoudt ook een interne status die het mogelijk maakt om verschillende typeexemplaren te coderen en decoderen naar dezelfde buffer door opvulling toe te voegen indien nodig voor uitlijning. De MesIncrementalHandleReset functie stelt een ingang opnieuw in op de oorspronkelijke status om lezen of schrijven vanaf het begin van de buffer mogelijk te maken.

De functies Alloc en Write, samen met een door de toepassing gedefinieerde aanwijzer, worden gekoppeld aan een coderingsservice die wordt verwerkt door een aanroep naar de functie MesEncodeIncrementalHandleCreate. MesEncodeIncrementalHandleCreate wijst het geheugen toe dat nodig is voor de ingang en initialiseert deze.

De toepassing kan MesDecodeIncrementalHandleCreate aanroepen om een decoderingsgreep te maken, MesIncrementalHandleReset om de ingang opnieuw te initialiseren of MesHandleFree om het geheugen van de handle vrij te maken. De functie Read, samen met een door de toepassing gedefinieerde parameter, is gekoppeld aan een decoderingsgreep door een aanroep naar de MesDecodeIncrementalHandleCreate routine. De functie maakt de ingang en initialiseert deze.

De parameters UserState, Alloc, Write en Read van MesIncrementalHandleRe set kunnen worden NULL- om geen wijziging aan te geven.