数组和Sized-Pointer属性
MIDL 提供了一组丰富的功能,用于传递数据数组和指向数据的指针。 可以使用这些属性来指定数组的特征和多个指针级别。
Attribute | 用法 |
---|---|
size_is | 指定要为大小指针分配的内存量、用于调整大小指针的指针以及单维或多维数组。 |
max_is | 数组索引的最大值。 |
length_is | 要传输的数组元素数。 |
first_is | 要传输的第一个数组元素的索引。 |
last_is | 提供要传输的最后一个数组元素的索引。 |
字符串 | 指示一维 字符、 wchar_t、 字节 (或等效) 数组或指向此类数组的指针将作为字符串进行处理。 |
range | 为在运行时设置其值的参数或字段指定允许值的范围。 |
MIDL 支持三种类型的指针:引用指针、唯一指针和完整指针。 这些指针由指针属性 ref、 unique 和 ptr 指定。
指针属性可以应用为类型属性;作为应用于结构成员、联合成员或参数的字段属性;或作为应用于函数返回类型的函数属性。 指针属性还可以与 pointer_default 关键字一起显示。
若要允许指针参数在远程函数期间更改值,必须提供另一级别的间接连接,方法是提供多个指针声明符。 应用于参数的显式指针属性仅影响参数最右侧的指针声明符。 当参数声明中有多个指针声明符时,其他声明符默认为 由pointer_default 属性指定的指针属性。 若要将不同的指针属性应用于多个指针声明符,必须定义指定显式指针属性的中间类型。
默认Pointer-Attribute值
如果没有指针属性与作为参数的指针相关联,则假定该指针是 ref 指针。
如果没有指针属性与作为结构或联合成员的指针相关联,MIDL 编译器会使用以下优先级规则分配指针属性, (1 为最高) :
- 显式应用于指针类型的属性
- 显式应用于指针参数或成员的属性
- IDL 文件中定义类型的 pointer_default 属性
- IDL 文件中导入类型的 pointer_default 属性
- ptr (osf 模式) ; 唯 一 (Microsoft RPC 默认模式)
在默认模式下编译 IDL 文件时,导入的文件可以从导入文件继承指针属性。 使用 /osf 开关进行编译时,此功能不可用。 有关详细信息,请参阅 导入。
函数返回类型
函数返回的指针必须是 唯 一指针或完整指针。 如果函数结果为引用指针(显式或默认情况下),MIDL 编译器将报告错误。 返回的指针始终指示新存储。
返回指针值的函数可以将指针属性指定为函数属性。 如果指针属性不存在,函数结果指针将使用作为 pointer_default 属性提供的值。
类型定义中的指针属性
在 typedef 语句的顶层指定指针属性时,指定的属性将按预期应用于指针声明符。 如果未指定指针属性,则 typedef 语句顶层的指针声明符会在使用时继承指针属性类型。
DCE IDL 不允许显式应用同一指针属性两次,例如,在 typedef 声明和参数属性列表中。 使用 MIDL 编译器的默认 (Microsoft 扩展) 模式时,此约束会放宽。
有关在远程过程调用中使用 MIDL 数组和指针的讨论,请参阅 数组和指针。