长度、大小和方向属性

在客户端和服务器之间传递数组时,与大小相关的属性 [max_is] 和 [size_is] 确定服务器存根分配的数组元素数。 与长度相关的属性 [length_is]、[first_is]和 [last_is] 确定将多少个元素传输到服务器和客户端。

可将不同的方向属性应用于参数。 但是,方向属性的某些组合可能会导致错误。 例如,假设你正在编写一个接口,该接口指定一个过程,其中包含两个参数、一个数组和数组的传输长度。 术语 dir_attr 将应用于参数的方向属性称为:

Proc1(
    [dir_attr] short *plength;
    [dir_attr, length_is(pLength)] short array[MAX_SIZE]);

下表描述了每个方向属性组合的 MIDL 编译器行为。

数组 Length 参数 从客户端到服务器调用期间的存根作 从服务器返回到客户端的存根作
[中的] [中的] 传输参数指示的长度和元素数。 未传输任何数据。
[中的] [out] 不合法;MIDL 编译器错误。 不合法;MIDL 编译器错误。
[中的] [inout] 传输长度和长度参数指示的元素数。 仅传输长度。
[out] [中的] 传输长度。
如果数组大小是固定的,请分配服务器上的数组大小,但不会传输任何元素。
如果未绑定数组大小,则不合法:MIDL 编译器错误。
传输长度指示的元素数。
请注意,长度可以更改,并且可以具有与客户端上的值不同的值。 不要传输长度。
[out] [out] 为服务器上的长度参数分配空间,但不传输参数。 如果数组大小是固定的,请分配服务器上的数组大小,但不会传输任何元素。
如果数组大小不固定,则不合法:MIDL 编译器错误。
传输由服务器应用程序设置的长度所指示的长度和元素数。
[out] [inout] 传输长度参数。 如果绑定数组大小,请分配服务器上的数组大小,但不会传输任何元素。
如果未绑定数组大小,则不合法:MIDL 编译器错误。
传输长度。 传输长度指示的数组元素数。
[inout] [中的] 传输参数指示的长度和元素数。 不要传输长度。 传输长度指示的元素数。
请注意,长度可以更改,并且可以在客户端上具有与原始值不同的值。
[inout] [out] 不合法;MIDL 编译器错误。 不合法;MIDL 编译器错误。
[inout] [inout] 传输参数指示的长度和元素数。 传输参数指示的长度和元素数。

通常,不应修改服务器端的长度或大小参数。 如果更改长度参数,则可以孤立内存。 有关详细信息,请参阅 内存孤立