Freigeben über


Inkrementelle Serialisierung

Wenn Sie die inkrementelle Serialisierung des Stils verwenden, geben Sie drei Routinen zum Bearbeiten des Puffers an. Diese Routinen sind: Alloc, Read und Write. Die Alloc-Routine weist einen Puffer der erforderlichen Größe zu. Die Write-Routine schreibt die Daten in den Puffer, und die Read-Routine ruft einen Puffer ab, der Gemarsaldaten enthält. Ein einzelner Serialisierungsaufruf kann mehrere Aufrufe an diese Routinen ausführen.

Der inkrementelle Serialisierungsstil verwendet die folgenden Routinen:

Die Prototypen für die Funktionen Alloc, Lese- und Schreibzugriff, die Sie bereitstellen müssen, werden unten gezeigt:

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

Die State-Eingabe eines Parameters für alle drei Funktionen ist der anwendungsdefinierte Zeiger, der dem Codierungsdienstehandle zugeordnet war. Die Anwendung kann diesen Zeiger verwenden, um auf die Struktur zuzugreifen, die anwendungsspezifische Informationen enthält, z. B. ein Dateihandle oder einen Datenstromzeiger. Beachten Sie, dass die Stubs den Statuszeiger nicht ändern, anstatt ihn an die Funktionen Alloc, Lese- und Schreibzugriff zu übergeben. Während der Codierung wird Alloc aufgerufen, um einen Puffer abzurufen, in den die Daten serialisiert werden. Anschließend wird Write aufgerufen, damit die Anwendung steuern kann, wann und wo die serialisierten Daten gespeichert werden. Während der Decodierung wird Read aufgerufen, um die angeforderte Anzahl serialisierter Daten zurückzugeben, aus denen die Anwendung sie gespeichert hat.

Ein wichtiges Feature der inkrementellen Formatvorlage ist, dass der Ziehpunkt den Statuszeiger für Sie behält. Dieser Zeiger behält den Zustand bei und wird nie von den RPC-Funktionen berührt, außer wenn der Zeiger auf alloc, Write oder Read-Funktion übergeben wird. Das Handle behält auch einen internen Zustand bei, der es ermöglicht, mehrere Typinstanzen mit demselben Puffer zu codieren und zu decodieren, indem sie den Abstand nach Bedarf für die Ausrichtung hinzufügen. Die MesIncrementalHandleReset--Funktion setzt ein Handle auf den Anfangszustand zurück, um das Lesen oder Schreiben vom Anfang des Puffers zu ermöglichen.

Die Alloc- und Write-Funktionen sowie ein anwendungsdefinierter Zeiger werden einem Codierungsdiensthandle zugeordnet, indem ein Aufruf der MesEncodeIncrementalHandleCreate-Funktion verwendet wird. MesEncodeIncrementalHandleCreate weist den für das Handle benötigten Speicher zu und initialisiert ihn dann.

Die Anwendung kann MesDecodeIncrementalHandleCreate aufrufen, um ein Decodierungshandle zu erstellen, MesIncrementalHandleReset-, um das Handle neu zu initialisieren, oder MesHandleFree, um den Speicher des Handles freizugeben. Die Read-Funktion zusammen mit einem anwendungsdefinierten Parameter wird einem Decodierungshandle durch einen Aufruf der MesDecodeIncrementalHandleCreate Routine zugeordnet. Die Funktion erstellt das Handle und initialisiert es.

Die Parameter "UserState", "Alloc", "Write" und "Read" von MesIncrementalHandleReset können NULL- sein, um keine Änderung anzugeben.