編碼屬性
[編碼] 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
-
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();
}