length_is 特性

[length_is] 属性指定要传输的数组元素数。 必须指定非负值。

[length_is( limited-expression-list )]

参数

limited-expression-list

指定一个或多个 C 语言表达式。 每个表达式的计算结果为一个整数,该整数表示要传输的数组元素数。 MIDL 编译器支持条件表达式、逻辑表达式、关系表达式和算术表达式。 MIDL 不允许在表达式中调用函数,也不允许递增和递减运算符。 用逗号分隔多个表达式。

备注

未指定 [last_is] 时,[length_is] 属性确定对应于 [last_is] 属性数组索引的值。 这些数组索引之间的关系如下:length = last - first + 1。

[length_is] 属性不能与 [last_is] 属性或 [string] 属性同时使用。

若要定义具有 [length_is] 或 [last_is] 属性的计数字符串,请使用不带 [string] 属性的字符数组或指针。

将常量表达式与 [length_is] 属性一起使用是不恰当的。 这是合法的,但效率低下,并将导致代码封送处理速度变慢。

可以将 [size_is][length_is] 属性一起使用。 执行此操作时, [size_is] 属性控制为数据分配的内存量。 [length_is] 属性指定传输的元素数。 [size_is][length_is] 属性指定的内存量不需要相同。 例如,客户端可能会将 [inout] 参数传递给服务器,并使用 [size_is] 指定较大的内存分配,即使它指定要使用 [length_is] 传递的少量数据元素。 这使服务器能够用比收到的更多的数据填充数组,然后可以将其发送回客户端。

通常,在 [in] 或 [out] 参数上同时指定 [size_is][length_is]没有用。 在这两种情况下, [size_is] 控制内存分配。 应用程序可以使用 [size_is] 分配比 [length_is]) 指定的传输 ( 更多的数组元素。 但是,这将效率低下。 为 [size_is] 和 [length_is] 指定相同的值也效率低下。 因为它会在参数封送期间产生额外的开销。 如果 [size_is][length_is] 的值始终相同,请省略 [length_is] 属性。

示例

/* counted string holding at most "size" characters */ 
typedef struct 
{ 
    unsigned short size; 
    unsigned short length; 
    [size_is(size), length_is(length)] char string[*]; 
 } COUNTED_STRING_TYPE; 
 
/* counted string holding at most 80 characters */ 
typedef struct 
{ 
    unsigned short length; 
    [length_is(length)] char string[80]; 
} STATIC_COUNTED_STRING_TYPE; 
 
HRESULT Proc1(
    [in] short iLength; 
    [in, length_is(iLength)] short asNumbers[10]);

另请参阅

字段属性

first_is

接口定义 (IDL) 文件

last_is

max_is

min_is

size_is

字符串