数组和 Sized-Pointer 属性

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

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

 

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

指针属性可以作为类型属性应用;作为应用于结构成员、联合成员或参数的字段属性;或作为应用于函数返回类型的函数属性。 指针属性还可以与 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 数组和指针的讨论,请参阅 数组和指针