数组和Sized-Pointer属性

MIDL 提供了一组丰富的功能,用于传递数据数组和指向数据的指针。 可以使用这些属性来指定数组的特征和多个指针级别。

Attribute 用法
size_is 指定要为大小指针分配的内存量、用于调整大小指针的指针以及单维或多维数组。
max_is 数组索引的最大值。
length_is 要传输的数组元素数。
first_is 要传输的第一个数组元素的索引。
last_is 提供要传输的最后一个数组元素的索引。
字符串 指示一维 字符wchar_t字节 (或等效) 数组或指向此类数组的指针将作为字符串进行处理。
range 为在运行时设置其值的参数或字段指定允许值的范围。

 

MIDL 支持三种类型的指针:引用指针、唯一指针和完整指针。 这些指针由指针属性 refuniqueptr 指定。

指针属性可以应用为类型属性;作为应用于结构成员、联合成员或参数的字段属性;或作为应用于函数返回类型的函数属性。 指针属性还可以与 pointer_default 关键字一起显示。

若要允许指针参数在远程函数期间更改值,必须提供另一级别的间接连接,方法是提供多个指针声明符。 应用于参数的显式指针属性仅影响参数最右侧的指针声明符。 当参数声明中有多个指针声明符时,其他声明符默认为 由pointer_default 属性指定的指针属性。 若要将不同的指针属性应用于多个指针声明符,必须定义指定显式指针属性的中间类型。

默认Pointer-Attribute值

如果没有指针属性与作为参数的指针相关联,则假定该指针是 ref 指针。

如果没有指针属性与作为结构或联合成员的指针相关联,MIDL 编译器会使用以下优先级规则分配指针属性, (1 为最高) :

  1. 显式应用于指针类型的属性
  2. 显式应用于指针参数或成员的属性
  3. IDL 文件中定义类型的 pointer_default 属性
  4. IDL 文件中导入类型的 pointer_default 属性
  5. ptr (osf 模式) ; 一 (Microsoft RPC 默认模式)

在默认模式下编译 IDL 文件时,导入的文件可以从导入文件继承指针属性。 使用 /osf 开关进行编译时,此功能不可用。 有关详细信息,请参阅 导入

函数返回类型

函数返回的指针必须是 一指针或完整指针。 如果函数结果为引用指针(显式或默认情况下),MIDL 编译器将报告错误。 返回的指针始终指示新存储。

返回指针值的函数可以将指针属性指定为函数属性。 如果指针属性不存在,函数结果指针将使用作为 pointer_default 属性提供的值。

类型定义中的指针属性

typedef 语句的顶层指定指针属性时,指定的属性将按预期应用于指针声明符。 如果未指定指针属性,则 typedef 语句顶层的指针声明符会在使用时继承指针属性类型。

DCE IDL 不允许显式应用同一指针属性两次,例如,在 typedef 声明和参数属性列表中。 使用 MIDL 编译器的默认 (Microsoft 扩展) 模式时,此约束会放宽。

有关在远程过程调用中使用 MIDL 数组和指针的讨论,请参阅 数组和指针