Share via


型別序列化

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);

請注意,具有隱含系結控制碼的遠端程式,以及具有隱含序列化控制碼的序列化型別都使用相同的全域控制碼變數。 因此,建議您不要在具有隱含控制碼的介面中混合類型序列化和遠端程式。 如需詳細資訊,請參閱 隱含與明確控制碼