累加串行化
使用累加樣式串行化時,您會提供三個例程來作緩衝區。 這些例程包括:Alloc、Read 和 Write。 Alloc 例程會配置所需大小的緩衝區。 Write 例程會將數據寫入緩衝區,而 Read 例程會擷取包含封送處理數據的緩衝區。 單一串行化呼叫可以對這些例程進行數次呼叫。
串行化的累加樣式會使用下列例程:
- MesEncodeIncrementalHandleCreate
- MesDecodeIncrementalHandleCreate
- MesIncrementalHandleReset
- MesHandleFree
您必須提供的 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,表示沒有變更。