在使用vc编写COM组件的时候,有的时候需要一次传递很多的数据,如果使用了SAFEARRAY就会很方便.下面是我在使用过程中所用的方法,这个例子创建一个两维的整数数组.
SAFEARRAY * saf;
SAFEARRAYBOUND bound[2];
bound[0].lLbound = 0;
bound[0].cElements = 5;
bound[1].lLbound = 0;
bound[1].cElements = 5;
saf = SafeArrayCreate( VT_I4,2,bound);
//在访问的时候
HUGEP long * plData;
SafeArrayAccessData( saf, (void HUGEP * FAR *)&plData );
for ( int i =0; i < 5; i ++ )
{
for ( int j =0; j < 5; j ++ )
{
plData[ i * 5 + j ] = i * j;
}
}
SafeArrayDestroy( saf );
在接口的数据定义中,使用VARIANT *方法. var.vt = VT_ARRAY.
var.parray = saf;
//如果这么传出去,那么上面最后的destroy就不需要了,不要要记住外面在使用了之后要调用这句话