型別串行化
MIDL 編譯程式會針對套用 [編碼] 或 [譯碼] 屬性的每個類型產生最多三個函式。 例如,對於名為 MyType的使用者定義型別,編譯程式會產生MyType_Encode、MyType_Decode和MyType_AlignSize函式的程式代碼。 針對這些函式,編譯程式會將原型寫入 Stub.h,並將原始程式碼寫入至 Stub_c.c。 一般而言,您可以使用 MyType_Encode 編碼 MyType 物件,並使用 MyType_Decode 從緩衝區譯碼物件。 如果您需要在配置封送處理緩衝區之前知道封送處理緩衝區的大小,則會使用MyType_AlignSize。
MIDL 編譯程式會產生下列編碼函式。 此函式會串行化 pObject 所指向之對象的數據,並根據句柄中指定的方法取得緩衝區。 將串行化數據寫入緩衝區之後,您可以控制緩衝區。 請注意,句柄會繼承先前呼叫的狀態,而且緩衝區必須對齊 8。
針對隱含句柄:
void MyType_Encode (MyType __RPC_FAR * pObject);
針對明確句柄:
void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);
下列函式會將應用程式記憶體中的數據還原串行化為 pObject 所指向的物件。 您可以根據句柄中指定的方法提供封送處理緩衝區。 請注意,句柄可以繼承先前呼叫的狀態,而且緩衝區必須對齊 8。
針對隱含句柄:
void MyType_Decode (MyType __RPC_FAR * pObject);
針對明確句柄:
void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);
下列函式會傳回大小,以位元組為單位,其中包含類型實例,以及對齊數據所需的任何填補位元組。 這可讓一組相同或不同類型的實例串行化為緩衝區,同時確保每個對象的數據都適當對齊。 MyType_AlignSize假設 pObject 所指向的實例會封送處理為緩衝區,從對齊 8 的位移開始。
針對隱含句柄:
size_t MyType_AlignSize (MyType __RPC_FAR * pObject);
針對明確句柄:
size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);
請注意,具有隱含系結句柄和具有隱含串行化句柄的遠端程式都會使用相同的全域句柄變數。 因此,建議不要在介面中混合類型串行化和遠端程式與隱含句柄。 如需詳細資訊,請參閱 隱含與明確句柄。