概述
#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安全数组的使用方法的全部内容,希望文章能够帮你解决SAFEARRAY安全数组的使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复