天天看點

一維、二維數組向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的轉換。