represent_as 属性
[represent_as] ACF 属性将目标语言 repr-type 中的命名本地类型与在客户端和服务器之间传输的名为-type 的传输类型相关联。
typedef [represent_as(repr-type) [[ , type-attribute-list ]] ] named-type;
void __RPC_USER named-type_from_local (
repr-type __RPC_FAR * ,
named-type __RPC_FAR * __RPC_FAR * );
void __RPC_USER named-type_to_local (
named-type __RPC_FAR * ,
repr-type __RPC_FAR * ); void __RPC_USER named-type _free_inst ( named-type __RPC_FAR * ); void __RPC_USER named-type _free_local ( repr-type __RPC_FAR * );
参数
-
named-type
-
指定在客户端和服务器之间传输的命名传输数据类型。
-
type-attribute-list
-
指定应用于类型的一个或多个属性。 用逗号分隔多个属性。
-
repr-type
-
以提供给客户端和服务器应用程序的目标语言指定表示的本地类型。
备注
使用 [represent_as]时,必须提供在本地和传输类型之间转换的例程,以及用于保存转换后数据的可用内存。 [represent_as] 属性指示存根调用用户提供的转换例程。
传输的类型 named-type 必须解析为 MIDL 基类型、预定义类型或类型标识符。 有关详细信息,请参阅 MIDL 基类型。
必须提供以下例程:
例程名称 | 说明 |
---|---|
named_type**_from_local** | 将数据从本地类型转换为网络类型。 例程为网络数据类型分配内存,包括网络数据类型中指针引用的任何数据的内存。 |
named_type**_to_local** | 将数据从网络类型转换为本地类型。 例程负责为本地类型中的指针引用的数据分配内存。 RPC 为本地类型本身分配内存。 |
named_type**_free_local** | 释放为本地类型中的指针引用的数据分配的内存。 RPC 释放类型本身的内存 |
named_type**_free_inst** | 释放为网络类型中的指针引用的数据和网络类型本身分配的内存。 |
客户端存根调用 named-type**_from_local**,为传输的类型分配空间,并将本地类型中的数据转换为网络类型。 服务器存根为原始数据类型分配空间,并调用 命名类型**_to_local**,以将数据从网络类型转换为本地类型。
从应用程序代码返回后,客户端和服务器存根调用 命名类型**_free_inst**,以解除分配网络类型的存储。 客户端存根调用 命名类型**_free_local**,以解除分配例程返回的存储。
以下类型不能具有 [represent_as] 属性:
- 一致性数组、可变数组或一致性变化数组
- 其中最后一个成员是符合性数组 (符合性结构的结构)
- 包含指针的指针或类型
- 管道或包含管道的类型
- 用作管道基类型的类型
- 预定义类型 handle_t, void
- 具有 [handle] 属性的类型
示例
//these data types defined in .IDL or elsewhere
typedef struct _lbox
{
long data;
struct _lbox *next;
} lbox;
typedef [ref] lbox *PBOX_LOC;
typedef long LONG4[4];
//in .ACF file :
interface iface
{
typedef [ represent_as(PBOX_LOC) ] LONG4;
}
另请参阅