关键词不能为空

当前您在: 主页 > 英语 >

SAFEARRAY使用

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-13 18:11
tags:

-

2021年2月13日发(作者:亚洲白虎)


SAFEARRAY


使用



目录:



SAFEARRAY


使用实例


1


目录:


1


前言:


1


何谓

SAFEARRAY



1


创建


SAFEARRAY: 2


方法 一:使用


SafeArrayAllocDescriptor


在栈上创建一维数组


2


方法二:使用


SafeArrayAllocDescriptor



Sa feArrayAllocData


在堆上创建一


维数组


2


方法三:使用


SafeArrayAl locDescriptor



SafeArrayAlloc Data


在堆上创建二


维数组


3 < /p>


方法四:使用


SafeArrayCreate

< br>在堆上创建一维数组


4


方法五:使用


SafeArrayCreate


在堆上创建二维数组


5


方法六:使用


SafeArrayCreateEx


创建包含结构的一维数组


5


访问


SAFEARRAY: 7


方法 一:使用


SafeArrayAccessData


方法


7


方法二:使用


SafeArrayGe tElement



SafeArrayPutElement 7


CComSafeArray


类介绍:


8


基本的入门例子


: 8


注意事项:


8



前言:



SAFEARRAY


使用总是困扰很多人,为了把这个问题说个明白,我把我目前掌握的知识做个

总结




何谓

SAFEARRAY




SAFE ARRAY


实际上是一个结构,关于这部分可以参考


MSDN< /p>




ms- help://R.2003FEB.2052/automat/htm/chap7_

我们不需要关心


16


位操作系统下的定义,因为我们团队只 在


WIN2000


以上平台下开发。




创建


SAFEARRAY:


方法一:使用


SafeArrayAllocDescriptor< /p>


在栈上创建一维数组



//


创建


SAFEARRAY


数组,每个元素为


long


型,该数组是一维数组



long nData[10]={1,2,3,4,5,6,7,8,9,10};



SAFEARRAY* pArray=NULL;


HRESULT hr=SafeArrayAllocDescriptor(1,& pArray);//


创建


SAFEARRAY


结构


的对象



pArray->cbElements=sizeof(nData[0]);


pArray->rgsabound[0].cElements=10;


pArray->rgsabound[0].lLbound=0;


pArray->pvData=nData;


pArray ->fFeatures=FADF_AUTO|FADF_FIXEDSIZE;//FADF_AUTO


指定在栈上分配


数据,并且大小不可以改变(固定为


10




< br>//


访问


SAFEARRAY


数 组



long* pValue=NULL;


SafeArrayAccessData(pArray,(void**)&pValue);


long Low(0),High(0);


hr=Safe ArrayGetLBound(pArray,1,&Low);//


维数索引从


1


开始



hr=S afeArrayGetUBound(pArray,1,&High);//


维数索 引从


1


开始




SafeArrayUnaccessData(pArray);


SafeArrayDestroy(pArray);


这种 方法在栈上分配数组元素所占的空间,即


nData


数组所用的 空间





方 法二:使用


SafeArrayAllocDescriptor



SafeArrayAllocData


在堆上创建一


维数组



//


创建


SAFEARRAY


数组,每个元素为


long


型,该数组是一维数组



long nData[10]={1,2,3,4,5,6,7,8,9,10};



SAFEARRAY* pArray=NULL;


HRESULT hr=SafeArrayAllocDescriptor(1,& pArray);//


创建


SAFEARRAY


结构


的对象



pArray->cbElements=sizeof(nData[0]);


pArray->rgsabound[0].cElements=10;


pArray->rgsabound[0].lLbound=0;


SafeArrayAllocData(pArray);



long* pData=NULL;


SafeArrayA ccessData(pArray,(void**)&pData);


long l(0),h(0);


SafeArrayGetLBound(pArray,1,&l);


SafeArrayGetUBound(pArray,1,&h);


long Size=h-l+1;


SafeArrayAc cessData(pArray,(void**)&pData);


for(long Idx=l;Idx


{


pData[Idx]=nData[Idx];


}


SafeArrayUnaccessData(pArray);



//


访问


S AFEARRAY


数组



long* pValue=NULL;


SafeArrayAccessData(pArray ,(void**)&pValue);


long Low(0),High(0);


hr=SafeArrayGetLBound(pArray,1,&Low);//


维数索引从


1


开始


hr=SafeArrayGetUBound(pArray,1,&High );//


维数索引从


1


开始

< p>



SafeArrayUnaccessData(pArray);


SafeArrayDestroy(pArray);




方法三:使用


SafeArrayA llocDescriptor



SafeArrayAllo cData


在堆上创建二


维数组



SAFEARRAY* pArray=NULL;


HRESULT hr=SafeArrayAllocDescriptor(2,&pArray);


pArray->rgsabound[0].lLbound=0;


pArray->rgsabound[0].cElements=3;


pArray->rgsabound[1].lLbound=0;


pArray->rgsabound[1].cElements=3;



pArray->cbElements=sizeof(long);


hr=SafeArrayAllocData(pArray);



long lDimension[2];


long x=1;


//


为第一行赋值



for(long i=0;i<3;++i)


{


lDimension[1]=0;//



< /p>


lDimension[0]=i;//




SafeArrayPutElement(pArray,lDimension ,&x);


x++;


}


//


为第二行赋值



for(long i=0;i<3;++i)


{


lDimension[1]=1;//



< /p>


lDimension[0]=i;//




SafeArrayPutElement(pArray,lDimension ,&x);


x++;


}



//


读取


SafeArray


中第二行第三列的数据



long y(0);


lDimension[1]=1;


lDimension[0]=2;


SafeArrayGe tElement(pArray,lDimension,&y);



SafeArrayDestroy(pArray);


< /p>


二维


SAFEARRAY


数组使用的时候 下标要注意


,


这里采用的是列主序的方式


,



lDimension[1]


代 表行,


lDimension[0]


代表列。

< br>





方法四:使用


SafeArrayCreate


在堆上创建一 维数组



SAFEARRAYBOUND Bound[1];


Bound[0].lLbound=0;


Bound[0].cElements=10;


SAFEARRAY* pArray=SafeArrayCreate(VT_I4,1,Bound);


long* pData=NULL;


HRESULT hr=SafeArrayAccessData(pArray,(void**)&pData);


long Low(0),High(0);


SafeArrayGetLBound(pArray,1,&Low);


SafeArrayGetUBound(pArray,1,&High);

-


-


-


-


-


-


-


-



本文更新与2021-02-13 18:11,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/651849.html

SAFEARRAY使用的相关文章