我是靠谱客的博主 丰富金针菇,最近开发中收集的这篇文章主要介绍SAFEARRAY安全数组的使用方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#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安全数组的使用方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部