您的位置:首页 > Web前端

一维、二维数组向SAFEARRAY转换

2008-08-07 13:15 176 查看
        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, <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

                           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的转换。
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: