一维、二维数组向SAFEARRAY转换

         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的转换。

   

你可能感兴趣的:(一维、二维数组向SAFEARRAY转换)