长度、大小和方向属性
在客户端和服务器之间传递数组时,与大小相关的属性 [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 编译器错误。 |
[中的] | [in, out] | 传输长度和长度参数指示的元素数。 | 仅传输长度。 |
[out] | [中的] | 传输长度。 如果数组大小是固定的,请分配服务器上的数组大小,但不会传输任何元素。 如果未绑定数组大小,则不合法:MIDL 编译器错误。 |
传输长度指示的元素数。 请注意,长度可以更改,并且可以具有与客户端上的值不同的值。 不要传输长度。 |
[out] | [out] | 为服务器上的长度参数分配空间,但不传输参数。 如果数组大小是固定的,请分配服务器上的数组大小,但不会传输任何元素。 如果数组大小不固定,则不合法:MIDL 编译器错误。 |
传输由服务器应用程序设置的长度所指示的长度和元素数。 |
[out] | [in, out] | 传输长度参数。 如果绑定数组大小,请分配服务器上的数组大小,但不会传输任何元素。 如果未绑定数组大小,则不合法:MIDL 编译器错误。 |
传输长度。 传输长度指示的数组元素数。 |
[in, out] | [中的] | 传输参数指示的长度和元素数。 | 不要传输长度。 传输长度指示的元素数。 请注意,长度可以更改,并且可以在客户端上具有与原始值不同的值。 |
[in, out] | [out] | 不合法;MIDL 编译器错误。 | 不合法;MIDL 编译器错误。 |
[in, out] | [in, out] | 传输参数指示的长度和元素数。 | 传输参数指示的长度和元素数。 |
通常,不应修改服务器端的长度或大小参数。 如果更改长度参数,则可以孤立内存。 有关详细信息,请参阅 内存孤立。