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