//define
VARIANT varChunk;
VariantInit(&varChunk);
const long lElements = 20;
const long lDims = 2;
SAFEARRAY *psa = NULL;
SAFEARRAYBOUND rgsabound[lDims];//维度,数量
rgsabound[0].lLbound = 8;//下标起始位置
rgsabound[0].cElements = 2;//数量
rgsabound[1].lLbound = 10;//下标起始位置
rgsabound[1].cElements = lElements;//数量
psa = SafeArrayCreate(VT_R8, lDims, rgsabound);
long llb1 = 0;
long lhb1 = 0;
SafeArrayGetLBound(psa, 1, &llb1);//8
SafeArrayGetUBound(psa, 1, &lhb1);//9
long llb2 = 0;
long lhb2 = 0;
SafeArrayGetLBound(psa, 2, &llb2);//10
SafeArrayGetUBound(psa, 2, &lhb2);//29
//data
srand(time(NULL)); //use current time as seed for random generator
double dSimulData[lElements];
for (long lIndex = 0; lIndex < lElements; ++lIndex)
{
dSimulData[lIndex] = rand();
}
//不按照维度赋值,按内存区赋值
double *buf;
double *pData = dSimulData;
SafeArrayAccessData(psa, (void **)&buf);
for (long l = 0; l <40; ++l)
{
if ( l == 20)
{
pData = dSimulData;//
}
*buf++ = *pData++;
}
SafeArrayUnaccessData(psa);
//赋值
//long lDim[2] = {0, 0};
//for (int i = 8; i <= lhb1; ++i)
//{
// lDim[0] = i;
// for (int j = 10; j <= lhb2; ++j)
// {
// lDim[1] = j;
// if (i == 8)
// {
// SafeArrayPutElement(psa, lDim, &dSimulData[j-10]);
// }
// else
// {
// SafeArrayPutElement(psa, lDim, &dSimulData[29-j]);
// }
// }
//}
//转存到Variant中
varChunk.vt = VT_ARRAY|VT_R8;
varChunk.parray = psa;
//读取
//double *dbuf;
//SafeArrayAccessData(varChunk.parray, (void **)&dbuf);
//double dTemp = 0.0;
//for (long l = 0; l <lElements; ++l)
//{
// dTemp = *dbuf++;//无维度区分,由列维度开始
// //8,10-9,10
// //8,11-9,11
//}
//SafeArrayUnaccessData(varChunk.parray);
//读取2
double *dbuf;
SafeArrayAccessData(varChunk.parray, (void **)&dbuf);
long lDim[2] = {0, 0};
double dTemp = 0;
for (int i = 8; i <= lhb1; ++i)
{
lDim[0] = i;
for (int j = 10; j <= lhb2; ++j)
{
lDim[1] = j;
SafeArrayGetElement(varChunk.parray, lDim, &dTemp);
}
}
SafeArrayUnaccessData(varChunk.parray);
SafeArrayDestroy(psa);