void Create( VARTYPE vtSrc, DWORD dwDims, DWORD* rgElements );英文不好,MSDN上vtSrc的内容是:The base type of the array (that is, the VARTYPE of each element of the array). The VARTYPE is restricted to a subset of the variant types. Neither the VT_ARRAY nor the VT_BYREF flag can be set. VT_EMPTY and VT_NULL are not valid base types for the array. All other types are legal.这参数起什么作用?如果设置为VT_R8和VT_R4有什么区别?谢谢!!

解决方案 »

  1.   

    如果设置为VT_R8和VT_R4有什么区别?——————————————————VT_R8
    就是数组是个double型数组VT_R4
    数组是float型。
    一个占8字节,一个占4字节。
      

  2.   

    高手来了,谢谢!
    我看的是微软的vc操作excel中的例子,COleSafeArray会用来保存好几种数据类型的数据,这时第一个变量如何选择?
      

  3.   

    你用什么类型就选什么啊,这个应该没有问题吧。COleSafeArray实际上就是一个数组嘛,只不过提供了比C的数组更丰富的功能而已。比如你在VC里面定义一个 float a[100]你用COleSafeArray来做的话就Create(VT_R4,1,&p),其中DWORD p=100。同样都是数组,道理是一样的。
      

  4.   

    如果是double 就选择VT_R8,如果是字符串就选VT_BSTR,如果是布尔值就选VT_BOOL,如果是COM对象数组就选择VT_UNKNOWN,不过Excel里面好像用不到COM对象数组。。
      

  5.   

    什么叫做“这个数组会同时用不同的类型”?数组的类型不就是每个元素的类型吗?不同是什么意思?你不会指VARIANT吧?
      

  6.   

    贴一点代码:
    COleSafeArray m_saData;
    ......
    range = sheet.GetRange(COleVariant("A1"), COleVariant("C5"));  //返回LPDISPATCHret = range.GetValue(oleData);    numElements[0]=   5;      //   在objRange中的行数.   
    numElements[1]=   3;              //   在objRange中的列数. 
    m_saData.Create(VT_R8, 2, numElements);
    m_saData = ret;......
    这样m_saData中就保存了excel中A,B,C三列的数据,行数为5,这三列的数据类型不一样。其中的Create是我添加的,我认为应该有的范围,只是参数VT_R8是我乱摘了一个进去。
      

  7.   

    这样的话,那要保存不同类型的值只能使用VARIANT类型的数据了。
      

  8.   

    VT_VARIANTVARIANT类型可以保存整数,浮点,字符串,对象,甚至一个数组。