读书人

COleSafeArray:GetElement帮忙啊新手找

发布时间: 2013-11-21 23:38:25 作者: rapoo

COleSafeArray::GetElement帮忙啊,新手找人帮忙,谢谢!
想实现从安全数组中把数据一个一个读出来,结果到olesa.GetElement(index, &varItem);(最后一句)这句总是显示varItem.vt随for循环从0开始增加,就是不是真实的long类型。求大侠们帮帮小弟啦!

// TODO: Add your command handler code here

VARTYPE vt =VT_I4; /*数组元素的类型,long*/
SAFEARRAYBOUND sab[2]; /*用于定义数组的维数和下标的起始值*/
sab[0].cElements = 4;
sab[0].lLbound = 0;
sab[1].cElements =2;
sab[1].lLbound = 0;
COleSafeArray olesa;
olesa.Create(vt,sizeof(sab)/sizeof(SAFEARRAYBOUND), sab);

/*通过指向数组的指针来对二维数组的元素进行间接赋值*/
long (*pArray)[2] = NULL;
olesa.AccessData((void **)&pArray);
memset(pArray, 0, sab[0].cElements*sab[1].cElements*sizeof(long));
/*释放指向数组的指针*/
olesa.UnaccessData();
pArray = NULL;


/*对二维数组的元素进行逐个赋值*/
long index[2] = {0, 0};
long lFirstLBound = 0;
long lFirstUBound = 0;
long lSecondLBound = 0;
long lSecondUBound = 0;
olesa.GetLBound(1, &lFirstLBound);
olesa.GetUBound(1, &lFirstUBound);
olesa.GetLBound(2, &lSecondLBound);
olesa.GetUBound(2, &lSecondUBound);
for (long i = lFirstLBound; i <= lFirstUBound; i++)
{
index[0] = i;
for (long j = lSecondLBound; j <= lSecondUBound; j++)
{
index[1] = j;
long lElement = i *sab[1].cElements + j;
olesa.PutElement(index, &lElement);

}
}

VARIANT varItem;
VariantInit(&varItem);
varItem.vt=VT_I4;
CString strItem= _T("");
//olesa.Attach(varItem);




memset(index, 0, 2 * sizeof(long));
m_ListCtrl.InsertColumn(0, _T(""), 0, 100);
for (long j = lSecondLBound; j<= lSecondUBound; j++)
{
CString strColName = _T("");
strColName.Format(_T("%d"), j);
m_ListCtrl.InsertColumn(j, strColName, 0, 100);
}
for (long i = lFirstLBound; i <= lFirstUBound; i++)
{
CString strRowName = _T("");
strRowName.Format(_T("%d"), i);
m_ListCtrl.InsertItem(i+1, strRowName);

index[0] = i;
for (long j = lSecondLBound; j <= lSecondUBound; j++)
{
index[1] = j;
olesa.GetElement(index, &varItem); 二维数组 GetElement? GetElement 数据类型
[解决办法]
olesa.GetElement(index, &varItem);
LZ你应该是varItem用错类型了 ,你创建long类型。返回的应该的也是使用long
varItem 改回long,那么返回值是0,1,2,3,4,5,6,7

读书人网 >VC/MFC

热点推荐