这里以整型数组为例。
一维数组的转换在http://blog.csdn.net/primer_programer/archive/2008/08/06/2775106.aspx 这片文章中已说明。下面说一下二维数组的转换。
定义二维3*3的整形数组如下:
int arg2[3][3] = {1, 2, 1,
3, 4, -1,
0, 2, 0};
转换的方法:
VARIANT varArg1;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[2]; // 二维需要定义两个元素
rgsabound[0].lLbound = 0; // 一维的下界(下界就是下标的最小值)
rgsabound[0].cElements = 3; // 一维的元素的个数
rgsabound[1].lLbound = 0; // 二维的下界
rgsabound[1].cElements = 3; // 二维的元素的个数
long lIndex[2]; // 定义索引
psa = SafeArrayCreate(VT_I4, 2, rgsabound); // 按照二维数组分配空间
for (long k = 0; k < (long)3; k++)
{
lIndex[0] = k;
for ( long num = 0; num < (long)3; num++ )
{
lIndex[1] = num;
SafeArrayPutElement (psa, lIndex, &arg2[k][num]); // lIndex作为SAFEARRAY中的索引。
}
}
varArg1.vt = VT_ARRAY | VT_I4; // 类型
varArg1.parray = psa; // 赋值
SafeArrayDestroyData( psa );
这样就实现了整型数组到SAFEARRAY的转换。