COM数组
COM中的一维数组主要分下以下几种类型:
1:固定数组,其维数大小是固定的,这种数组处理效率最高。主要的应用场合就是数组的大小预先可以确知,如是[in]时,就主要用这种数组了,声明语法如下
HRESULT void Fly([in] int arr[5]);
调用时
Int arr[5]=new int[]{1,2,3,4,5};
Fly(arr);
2:适应性数组:数组的大小预先不知,就是说大小可以依赖其参数中的另一个参数,当然这个参数得要在它之前的了。声明语法如下。
HRESULT void Fly([in] size,[out, size_is(size)] int arr[]);或
HRESULT void Fly([in] size,[out, size_is(size)] int arr[*]);或
HRESULT void Fly([in] size,[out, size_is(size)] int *arr);
调用时
Int arr[5]=new int[]{1,2,3,4,5};
Fly(5,arr);
在上面的声明中可以用max_is来替size_is,max_is指的数组中的最大的下标索引的大小。所以它总比size_is指定的小1.
前面的size也可以是输出类型的。只要是输出数组,这个参数就可以是输出类型的。
3:可变性数组:可以指定数组中的部分数据来列集,传输等,也就是只需给出部份有效的数据时就可以用到可变性数组了。声明语法如下。
HRESULT void Fly([in] length,[in] first,[out, length_is(length),first_is(firt)] int arr[]);或
HRESULT void Fly([in] first,[in] last ,[out,first_is(first),last_is(last)] int arr[]);
调用
Int arr[5]=new int[]{1,2,3,4,5};
Fly(0,3,arr);
用这种方式主要的优点就是可以只传输合适的区域节省了传输的开销,但是它在散集时的开销就增大了,不过对远程的来讲,这个开销算不了什么的了。
4:开放性数组,数组的大小可以指定,而且还可以指定传输的区域。就是综合了可变数组及适应性数组的表达。声明如下。
HRESULT void Fly([in] size,[in] length,[in] first,[out,size_is(size), length_is(length),first_is(firt)] int arr[]);
调用
Int arr[5]=new int[]{1,2,3,4,5};
Fly(5,3,0,arr);
COM中的一维数组主要就是上面所举的这些。