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

指定应用于类型的其他属性,例如 [解码][allocate]

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

另请参阅

应用程序配置文件 (ACF)

分配

解码