共用方式為


累加序列化

使用累加樣式序列化時,您會提供三個常式來操作緩衝區。 這些常式包括:配置、讀取和寫入。 Alloc 常式會配置所需大小的緩衝區。 Write 常式會將資料寫入緩衝區,而 Read 常式會擷取包含封送處理資料的緩衝區。 單一序列化呼叫可以對這些常式進行數個呼叫。

序列化的累加樣式會使用下列常式:

您必須提供的 Alloc、讀取和寫入函式原型如下所示:

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 指標,而不是將它傳遞給 Alloc、Read 和 Write 函式。 在編碼期間,會呼叫 Alloc 以取得序列化資料的緩衝區。 然後會呼叫 Write,讓應用程式控制序列化資料的儲存時機和位置。 在解碼期間,會呼叫 Read,以傳回應用程式儲存序列化資料的要求位元組數目。

累加樣式的重要功能是控制碼會為您保留狀態指標。 此指標會維護狀態,而且永遠不會受到 RPC 函式接觸,但將指標傳遞至 Alloc、Write 或 Read 函式時除外。 控制碼也會維護內部狀態,以便視需要為對齊新增填補,將數個類型實例編碼和解碼為相同的緩衝區。 MesIncrementalHandleReset函式會將控制碼重設為其初始狀態,以啟用從緩衝區開頭讀取或寫入。

Alloc 和 Write 函式以及應用程式定義的指標,會透過 呼叫 MesEncodeIncrementalHandleCreate 函式,與編碼服務控制碼相關聯。 MesEncodeIncrementalHandleCreate 會配置控制碼所需的記憶體,然後初始化它。

應用程式可以呼叫 MesDecodeIncrementalHandleCreate 來建立解碼控制碼、 MesIncrementalHandleReset 來重新初始化控制碼,或 MesHandleFree 釋放控制碼的記憶體。 Read 函式以及應用程式定義的參數會與 MesDecodeIncrementalHandleCreate 常式的呼叫相關聯的解碼控制碼。 函式會建立控制碼,並將其初始化。

MesIncrementalHandleReset的 UserState、Alloc、Write 和 Read 參數可以是Null,表示沒有變更。