您的位置:首页 > Web前端

SAFEARRAY安全数组的使用方法

2015-11-10 16:34 435 查看
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include <OAidl.h>
int _tmain(int argc, _TCHAR* argv[])
{
long l2Arr[4][3]={{3,15,9},{27,14,98},{35,11,6},{19,4,61}};
/*
以下代码执行:
1#:将l2Arr二维数组写入安全数组
2#:再从安全数组中读出二维数组
*/
SAFEARRAY* lpSafeArr=NULL;
HRESULT hr=SafeArrayAllocDescriptor(2,&lpSafeArr);	//为安全数组描述器分配内存,这个数组的维数是2
if(SUCCEEDED(hr))
{
//lpSafeArr->cDims=2;								//维数
lpSafeArr->cbElements=sizeof(l2Arr[0][0]);		//每个数组元素的大小(字节单位)
lpSafeArr->fFeatures=FADF_AUTO|FADF_FIXEDSIZE;	//表明该二维数组具有固定的大小并且保存在栈上(而不是分配于堆上)
//lpSafeArr->pvData=l2Arr;						//安全数组的数据

lpSafeArr->rgsabound[0].lLbound=0;				//下标起始于0
lpSafeArr->rgsabound[0].cElements=4;			//有4个元素(4行)

lpSafeArr->rgsabound[1].lLbound=0;				//下标起始于0
lpSafeArr->rgsabound[1].cElements=3;			//有3个元素(3列)

hr=SafeArrayAllocData(lpSafeArr);
if(SUCCEEDED(hr))
{
long rgIndices[2]={0,0};

unsigned long nRowCount=lpSafeArr->rgsabound[0].cElements;//4
unsigned long nColCount=lpSafeArr->rgsabound[1].cElements;//3

long lLBound1,lLBound2,lUBound1,lUBound2;
SafeArrayGetLBound(lpSafeArr,1,&lLBound1);//0
SafeArrayGetUBound(lpSafeArr,1,&lUBound1);//2
SafeArrayGetLBound(lpSafeArr,2,&lLBound2);//0
SafeArrayGetUBound(lpSafeArr,2,&lUBound2);//3

//1# 将l2Arr二维数组写入安全数组
for(long i=lLBound2;i<=lUBound2;i++)
{
rgIndices[1]=i;//行索引
for(long j=lLBound1;j<=lUBound1;j++)
{
rgIndices[0]=j;//列索引
hr=SafeArrayPutElement(lpSafeArr,rgIndices,&(l2Arr[i][j]));
if(FAILED(hr))
{
cerr << "SafeArrayPutElement Failure.\n";
return -1;
}
}
}

//2# 从安全数组中读出二维数组
for(long i=lLBound2;i<=lUBound2;i++)
{
rgIndices[1]=i;//行索引
for(long j=lLBound1;j<=lUBound1;j++)
{
rgIndices[0]=j;//列索引
long lEleVal;
hr=SafeArrayGetElement(lpSafeArr,rgIndices,&lEleVal);
if(SUCCEEDED(hr))
{
cout << lEleVal;
((j+1)%(lUBound1+1)==0)?cout << endl:cout<< "\t";
}
}
}
SafeArrayDestroyData(lpSafeArr);
}
SafeArrayDestroyDescriptor(lpSafeArr);
}
}
3       15      9

27      14      98

35      11      6

19      4       61

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SAFEARRAY 安全数组