类型序列化

MIDL 编译器为应用 [ encode] 或 [ decode] 属性的每个类型生成最多三个函数。 例如,对于名为 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);

请注意,具有隐式绑定句柄的远程过程和具有隐式序列化句柄的序列化类型使用相同的全局句柄变量。 因此,建议不要在接口中混合使用隐式句柄的类型序列化和远程过程。 有关详细信息,请参阅 隐式句柄与显式句柄