Artımlı Serileştirme
Artımlı stil serileştirmesini kullanırken, arabelleği işlemek için üç yordam sağlarsınız. Bu yordamlar şunlardır: Alloc, Read ve Write. Alloc yordamı, gerekli boyutta bir arabellek ayırır. Write yordamı verileri arabelleğe yazar ve Okuma yordamı, sıralanmış verileri içeren bir arabellek alır. Tek bir serileştirme çağrısı bu yordamlara birkaç çağrı yapabilir.
Serileştirmenin artımlı stili aşağıdaki yordamları kullanır:
- MesEncodeIncrementalHandleOluştur
- MesDecodeIncrementalHandleOluştur
- MesIncrementalHandleReset
- MesHandleFree
Sağlamanız gereken Alloc, Read ve Write işlevlerinin prototipleri aşağıda gösterilmiştir:
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 */
Üç işlevin de State girişi parametresi, kodlama hizmetleri tanıtıcısıyla ilişkilendirilmiş uygulama tanımlı işaretçidir. Uygulama, dosya tanıtıcısı veya akış işaretçisi gibi uygulamaya özgü bilgileri içeren yapıya erişmek için bu işaretçiyi kullanabilir. Saptamaların Durum işaretçisini Alloc, Read ve Write işlevlerine geçirmek dışında değiştirmediğini unutmayın. Kodlama sırasında Verilerin seri hale getirildiği bir arabellek elde etmek için Alloc çağrılır. Ardından, uygulamanın serileştirilmiş verilerin ne zaman ve nerede depolandığını denetlemesini sağlamak için Write çağrılır. Kod çözme sırasında, uygulamanın depoladığı yerden istenen sayıda serileştirilmiş veri döndürmek için Read çağrılır.
Artımlı stilin önemli bir özelliği, tanıtıcının durum işaretçisini sizin için tutmasıdır. Bu işaretçi durumu korur ve işaretçiyi Ayırma, Yazma veya Okuma işlevine geçirme dışında RPC işlevlerine hiçbir zaman dokunmaz. Tanıtıcı ayrıca hizalama için gereken doldurmayı ekleyerek çeşitli tür örneklerini aynı arabelleğe kodlamayı ve çözmeyi mümkün kılan bir iç durum tutar. MesIncrementalHandleReset işlevi, bir tanıtıcıyı ilk durumuna sıfırlar ve arabelleğinden okumayı veya yazmayı etkinleştirir.
Uygulama tanımlı bir işaretçiyle birlikte Alloc ve Write işlevleri, MesEncodeIncrementalHandleCreate işlevine yapılan bir çağrı tarafından bir kodlama hizmetleri tanıtıcısıyla ilişkilendirilir. MesEncodeIncrementalHandleCreate tanıtıcı için gereken belleği ayırır ve sonra başlatır.
Uygulama MesDecodeIncrementalHandleCreate çağırarak kod çözme tutamacını oluşturabilir MesIncrementalHandleReset tanıtıcıyı yeniden başlatabilir veya tanıtıcının belleğini boşaltmak için MesHandleFree. Uygulama tanımlı bir parametreyle birlikte Read işlevi, MesDecodeIncrementalHandleCreate yordamına yapılan bir çağrıyla kod çözme tutamacı ile ilişkilendirilir. işlevi tanıtıcıyı oluşturur ve başlatır.
MesIncrementalHandleReset UserState, Alloc, Write ve Read parametreleri, değişiklik olmadığını belirtmek için NULL olabilir.