Sdílet prostřednictvím


Přírůstkové serializace

Při použití serializace přírůstkového stylu zadáte tři rutiny pro manipulaci s vyrovnávací pamětí. Mezi tyto rutiny patří: Alloc, Read a Write. Rutina Alloc přidělí vyrovnávací paměť požadované velikosti. Rutina zápisu zapisuje data do vyrovnávací paměti a rutina čtení načte vyrovnávací paměť, která obsahuje zařazovaná data. Jedno volání serializace může provádět několik volání těchto rutin.

Inkrementální styl serializace používá následující rutiny:

Prototypy funkcí Alloc, Read a Write, které musíte zadat, jsou uvedené níže:

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. Aplikace může použít tento ukazatel pro přístup ke struktuře obsahující informace specifické pro aplikaci, jako je popisovač souboru nebo ukazatel datového proudu. Všimněte si, že zástupné procedury neupravují jiný ukazatel stavu než předat funkci Alloc, Read a Write. Během kódování je volána Alloc získat vyrovnávací paměť, do které jsou data serializována. Potom se zavolá zápis, který aplikaci umožní řídit, kdy a kde jsou serializovaná data uložena. Během dekódování je volána funkce Read, která vrátí požadovaný počet bajtů serializovaných dat, ze kterých je aplikace uložila.

Důležitou funkcí přírůstkového stylu je, že úchyt udržuje ukazatel stavu za vás. Tento ukazatel udržuje stav a funkce RPC se nikdy nedotkne, s výjimkou předání ukazatele na funkci Alloc, Write nebo Read. Popisovač také udržuje vnitřní stav, který umožňuje kódovat a dekódovat několik instancí typu do stejné vyrovnávací paměti přidáním odsazení podle potřeby pro zarovnání. MesIncrementalHandleReset funkce resetuje popisovač do počátečního stavu, aby bylo možné čtení nebo zápis od začátku vyrovnávací paměti.

Funkce Alloc a Write spolu s ukazatelem definovaným aplikací jsou přidruženy ke zpracování kódovací služby voláním MesEncodeIncrementalHandleCreate funkce. MesEncodeIncrementalHandleCreate přidělí paměť potřebnou pro popisovač a pak ji inicializuje.

Aplikace může volat MesDecodeIncrementalHandleCreate vytvořit dekódovací úchyt, MesIncrementalHandleReset znovu inicializovat úchyt nebo MesHandleFree uvolnit paměť popisovače. Funkce Read spolu s parametrem definovaným aplikací je přidružena k dekódovací obslužné rutině volání MesDecodeIncrementalHandleCreate rutiny. Funkce vytvoří popisovač a inicializuje ho.

Parametry UserState, Alloc, Write a Read MesIncrementalHandleRes et můžou být null označující žádnou změnu.