主题:急问:二维数组通过safearray传给variant数组的问题!
本人是想将一个整型Dat[25][2048]数组通过safearray传给variant数组,再传给com组件以实现某些操作,可是
现在不知道在什么地方出了问题,程序可以编译通过,只是运算的结果不对。怀疑问题出在数据传递的整个过程
中,请高手指点。
下附程序
void __fastcall TMainForm::Wiggle(Dat)
{
SAFEARRAY *pArray=NULL;
SafeArrayAllocDescriptor(2,&pArray);
pArray->rgsabound [0].lLbound =0;
pArray->rgsabound [0].cElements =25;
pArray->rgsabound [1].lLbound =0;
pArray->rgsabound [1].cElements =2048;
pArray->cbElements =sizeof(int);
pArray->pvData =Dat; //二维数组Dat[25][2048]这样赋组pArray->pvData
// 不知道对不对!
TVariant a;
a.SetSAFEARRAY(&pArray); //相把SAFEARRAY创建的二维数组
a.vt= VT_INT|VT_ARRAY|VT_BYREF;
wigb2->WiggleB(a);//此为com组件的调用!
//---------test----------以下程序想测试数据传递是否正确
int **tmp;
tmp=new int *[25];
for (int i=0;i<25;i++)
{
tmp[i]=new int[2048];
memset(tmp[i],0,sizeof(int)*2048);
memcpy(tmp[i],a.parray->pvData ,sizeof(int)*2048);
}
FILE *fp;
fp=fopen("test.txt","w+");
for (int i=0;i<25;i++)
{
for (int j=0;j<2048;j++)
fprintf(fp,"%f\t",(float)tmp[i][j]);
fprintf(fp,"\n");
}
fclose(fp);
//---------------------
}
现在不知道在什么地方出了问题,程序可以编译通过,只是运算的结果不对。怀疑问题出在数据传递的整个过程
中,请高手指点。
下附程序
void __fastcall TMainForm::Wiggle(Dat)
{
SAFEARRAY *pArray=NULL;
SafeArrayAllocDescriptor(2,&pArray);
pArray->rgsabound [0].lLbound =0;
pArray->rgsabound [0].cElements =25;
pArray->rgsabound [1].lLbound =0;
pArray->rgsabound [1].cElements =2048;
pArray->cbElements =sizeof(int);
pArray->pvData =Dat; //二维数组Dat[25][2048]这样赋组pArray->pvData
// 不知道对不对!
TVariant a;
a.SetSAFEARRAY(&pArray); //相把SAFEARRAY创建的二维数组
a.vt= VT_INT|VT_ARRAY|VT_BYREF;
wigb2->WiggleB(a);//此为com组件的调用!
//---------test----------以下程序想测试数据传递是否正确
int **tmp;
tmp=new int *[25];
for (int i=0;i<25;i++)
{
tmp[i]=new int[2048];
memset(tmp[i],0,sizeof(int)*2048);
memcpy(tmp[i],a.parray->pvData ,sizeof(int)*2048);
}
FILE *fp;
fp=fopen("test.txt","w+");
for (int i=0;i<25;i++)
{
for (int j=0;j<2048;j++)
fprintf(fp,"%f\t",(float)tmp[i][j]);
fprintf(fp,"\n");
}
fclose(fp);
//---------------------
}