SAFEARRAY安全数组的使用方法

来源:互联网 发布:淘宝背景音乐怎么关闭 编辑:程序博客网 时间:2024/04/30 03:55
#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);//为安全数组描述器分配内存,这个数组的维数是2if(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;//下标起始于0lpSafeArr->rgsabound[0].cElements=4;//有4个元素(4行)lpSafeArr->rgsabound[1].lLbound=0;//下标起始于0lpSafeArr->rgsabound[1].cElements=3;//有3个元素(3列)hr=SafeArrayAllocData(lpSafeArr);if(SUCCEEDED(hr)){long rgIndices[2]={0,0};unsigned long nRowCount=lpSafeArr->rgsabound[0].cElements;//4unsigned long nColCount=lpSafeArr->rgsabound[1].cElements;//3long lLBound1,lLBound2,lUBound1,lUBound2;SafeArrayGetLBound(lpSafeArr,1,&lLBound1);//0SafeArrayGetUBound(lpSafeArr,1,&lUBound1);//2SafeArrayGetLBound(lpSafeArr,2,&lLBound2);//0SafeArrayGetUBound(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
请按任意键继续. . .
1 0
原创粉丝点击