我遇到这样的一个问题,我有一个COleSafeArray *pArray,这是一个10行12列的指针,我想把它分割成两个COleSafeArray TempArray1和TempArray2,其中TempArray1是10行9列,TempArray2存放其余的数据,有没有较好的方法,我现在可以把pArray的元素一个一个读出来,在分别存放在两个临时数组中,这种方法速度很慢。另外,pArray是混合类型的可能是bstr,long,double...
请您告诉我一个比较好的方法。

解决方案 »

  1.   

    try to access data directly, instead of using GetElement/PutElement
    COleSafeArray olesa;
    DWORD numElements[] = {10, 12}; 
    olesa.Create(VT_VARIANT,2,numElements);
             // Initialize it with values...
             long index[2];
             for(index[0]=0; index[0]<numElements[0]; index[0]++) 
     {
                for(index[1]=0; index[1]<numElements[1]; index[1]++) 
    {
       VARIANT var;
       VariantInit(&var);
       switch(index[1]%3)
       {
       case 0:
       var.vt=VT_BSTR;
       var.bstrVal=CString("aaa").AllocSysString();
       break;
       case 1:
       var.vt=VT_I4;
       var.lVal=index[1];
       break;
       case 2:
       var.vt=VT_R8;
       var.dblVal=2.34;
       break;    }
                   olesa.PutElement(index, &var);
                }
             }
    //devide into 2 safearray
    VARIANT* pvar;
    olesa.AccessData((LPVOID*)&pvar);
    COleSafeArray olesa1;
    {
    DWORD numElements1[] = {10, 9}; 
    olesa1.Create(VT_VARIANT,2,numElements1);
    VARIANT* pvar1;
    olesa1.AccessData((LPVOID*)&pvar1);
    for(int i=0;i<numElements1[0];i++)
    {
    for(int j=0;j<numElements1[1];j++)
    {
    pvar1[i*numElements1[1]+j]=pvar[i*numElements[1]+j];
    }
    }
    olesa1.UnaccessData();
    }
    COleSafeArray olesa2;
    {
    DWORD numElements2[] = {10, 3}; 
    olesa2.Create(VT_VARIANT,2,numElements2);
    VARIANT* pvar2;
    olesa2.AccessData((LPVOID*)&pvar2);
    for(int i=0;i<numElements2[0];i++)
    {
    for(int j=0;j<numElements2[1];j++)
    {
    pvar2[i*numElements2[1]+j]=pvar[i*numElements[1]+j+9];
    }
    }
    olesa2.UnaccessData();
    }
    olesa.UnaccessData();