VARIANT中有一個成員是parray,它的類型是SAFEARRAY*。當把一個數組轉換成VARIANT類型時,實質上就是與SAFEARRAY之間的轉換。
這裡以整型數組為例。
一維數組的轉換在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的轉換。