首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

COleSafeArray:GetElement帮忙啊新手找人帮忙,多谢

2013-11-21 
COleSafeArray::GetElement帮忙啊,新手找人帮忙,谢谢!想实现从安全数组中把数据一个一个读出来,结果到oles

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

热点排行