encode 属性
[encode] 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 编译器生成应用程序可用于将数据序列化到缓冲区的代码。 [decode] 属性生成用于从缓冲区取消封送数据的代码。
使用 ACF 中的 [encode] 和 [decode] 属性为接口 IDL 文件中定义的过程或类型生成序列化代码。 用作接口属性时, [encode] 适用于 IDL 文件中定义的所有类型和过程。 用作操作属性时, [encode] 仅适用于指定的过程。 用作类型属性时, [encode] 仅适用于指定的类型。
将 [encode] 或 [decode] 属性应用于过程时,MIDL 编译器将生成序列化存根,其方式与为远程例程生成远程存根的方式类似。 过程可以是远程过程,也可以是序列化过程,但不能两者兼而有之。 生成的例程的原型将发送到 STUB。H 文件,而存根本身进入 STUB_C.C 文件。
MIDL 编译器为 [encode] 属性应用于的每个类型生成两个函数,并为 [decode] 属性适用的每个类型生成一个附加函数。 例如,对于名为 MyType 的用户定义类型,编译器会为MyType_Encode、MyType_Decode和MyType_AlignSize函数生成代码。 对于这些函数,编译器会将原型写入 STUB。H 和源代码STUB_C.
有关序列化句柄和编码或解码数据的其他信息,请参阅 序列化服务。
/*
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();
}