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