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
请按任意键继续. . .
相关文章推荐
- 谈ATL(五)--SAFEARRAY与CComSafeArray
- 11.编写COM常用IDL指令和注意事项详解
- 9.COM中特殊类型和相关函数
- # JaCOB与Variant与SafeArray与多维数组
- html 5 中的 6位 十六进制颜色码 代表的意思
- js_无缝滚动效果offsetLeft
- javascript中prototype属性的应用
- 4、界面前端设计师指南 - 软件项目角色指南系列文章
- 移动平台对 meta 标签的定义
- Bootstrap之表格checkbox复选框全选
- JS逻辑运算符&&与||的妙用
- 每个程序员都会的 35 个 jQuery 小技巧
- Javascript 严格模式详解
- SharePoint 2013 IT Professional--Permission Inheritance
- jQuery.extend 函数详解
- "_OBJC_CLASS_$ [文件名1]referenced from in[文件名2]:ld: symbol(s) not found问题解决办法
- 30个你 “ 不可能全部会做 ” 的javascript题目答案
- javascript之闭包
- jquery方法2
- javascript必知必会之prototype