Share via


編碼屬性

[編碼] ACF 屬性指定程式或資料類型需要序列化支援。

[ 
    encode 
    [ , interface-attribute-list] 
] 
interface interface-name
{
    interface-definition
}

[ encode [ , op-attribute-list] ] proc-name

typedef [encode [ , type-attribute-list] ] type-name

參數

interface-attribute-list

指定套用至整個介面的其他屬性。

interface-name

指定介面的名稱。

interface-definition

指定形成介面定義的 IDL 語句。

op-attribute-list

指定適用于 [解碼]等程式的其他作業屬性。

proc-name

指定程式的名稱。

type-attribute-list

指定套用至類型的其他屬性,例如[解碼][allocate]。

type-name

指定 IDL 檔案中定義的類型。

備註

[encode]屬性會導致 MIDL 編譯器產生程式碼,讓應用程式可用來將資料序列化為緩衝區。 [解碼]屬性會產生從緩衝區取消封存資料的程式碼。

使用 ACF 中的 [encode][解碼] 屬性,針對介面 IDL 檔案中定義的程式或類型產生序列化程式碼。 當做介面屬性使用時, [編碼] 會套用至 IDL 檔案中定義的所有類型和程式。 當做操作屬性使用時, [編碼] 只適用于指定的程式。 當做類型屬性使用時, [encode] 只適用于指定的型別。

[encode][解碼] 屬性套用至程式時,MIDL 編譯器會以類似方式產生序列化存根,因為遠端常式會產生遠端存根。 程式可以是遠端或序列化程式,但不能是兩者。 產生的常式原型會傳送至 STUB。存根本身進入 STUB_C.C 檔案時,H 檔案。

MIDL 編譯器會為每個類型產生兩個適用于[編碼]屬性的函式,而 [解碼]屬性會套用的每個類型產生一個額外的函式。 例如,針對名為 MyType 的使用者定義型別,編譯器會產生MyType_Encode、MyType_Decode和MyType_AlignSize函式的程式碼。 針對這些函式,編譯器會將原型寫入 STUB。要STUB_C.C 的 H 和原始程式碼。

如需序列化控制碼和編碼或解碼資料的詳細資訊,請參閱 序列化服務

範例

/* 
    ACF file example; 
    Assumes MyType1, MyType2, MyType3, MyProc1, MyProc2, MyProc3 defined 
    in IDL file  
    MyType1, MyType2, MyProc1, MyProc2 have encode and decode 
    serialization support 
    MyType3 and MyProc3 have encode serialization support only 
*/ 
[ 
    encode, 
    implicit_handle(handle_t bh) 
]    
interface regress 
{ 
    typedef [ decode ] MyType1; 
    typedef [ encode, decode ] MyType2; 
    [ decode ] MyProcc1(); 
    [ encode ] MyProc2(); 
}

另請參閱

應用程式組態檔 (ACF)

分配

解碼