使用VARIANT传递数组的方法及步骤
2010-05-22 13:17
736 查看
在使用COM/DCOM写组件时经常要传递数组,一般比如SHORT,LONG等指针可以直接传递相应的指针,但是当遇到需要传递BYTE数组就有问题了,COM不支持BYTE类型参数,传递BYTE数组也就无从说起了。经过查找资料发现使用VARIANT变量可以传递任何类型的数组,随将使用VARIANT数组的方法总结一下。其实在VARIANT传递数组的方法非常简单,只要理解SAFEARRAY数组的使用方法即可,实质上SafeArray就是将通常的数组增加一个描述符,说明其维数、长度、边界、元素类型等信息。SafeArray使用步骤如下:
步骤一:生成SafeArray数组
VARIANT varChunk;
SAFEARRAY *psa; //使用数组整理读取的数据
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements =len; //设置数组的大小
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound); //创建SafeArray数组
步骤二:给SafeArray赋值与读取
给SafeArray赋值或读取有两种方法,一种是直接读取数据缓冲区,一种是通过函数一个一个读取数组每个变量值,很显然前一种方法比后一种方法的效率要高很多,下面就两种方法分别给出相应代码
(1) 直接读取缓冲区
读取
BYTE *buf;
SafeArrayAccessData(psa, (void **)&buf); //安全指针
SafeArrayUnaccessData(psa); //关闭后仍然可读取数据,但不能写入
写入
BYTE *buf;
SafeArrayAccessData(psa, (void **)&buf); //安全指针
for(int i=0;irgsabound[0].cElements;
BYTE *pData=new BYTE[len];
for (int i=0;irgsabound[0].cElements;
for (int i=0;i
步骤一:生成SafeArray数组
VARIANT varChunk;
SAFEARRAY *psa; //使用数组整理读取的数据
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements =len; //设置数组的大小
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound); //创建SafeArray数组
步骤二:给SafeArray赋值与读取
给SafeArray赋值或读取有两种方法,一种是直接读取数据缓冲区,一种是通过函数一个一个读取数组每个变量值,很显然前一种方法比后一种方法的效率要高很多,下面就两种方法分别给出相应代码
(1) 直接读取缓冲区
读取
BYTE *buf;
SafeArrayAccessData(psa, (void **)&buf); //安全指针
SafeArrayUnaccessData(psa); //关闭后仍然可读取数据,但不能写入
写入
BYTE *buf;
SafeArrayAccessData(psa, (void **)&buf); //安全指针
for(int i=0;irgsabound[0].cElements;
BYTE *pData=new BYTE[len];
for (int i=0;irgsabound[0].cElements;
for (int i=0;i
相关文章推荐
- 使用VARIANT传递数组的方法及步骤
- 使用VARIANT传递数组的方法及步骤
- 使用Django向网页的页面js中传递一个数组的方法
- 在COM方法中用VARIANT类型传递数组数据
- php中使用url传递数组的方法
- 使用ajax传递数组的方法
- C#中使用ref和out传递数组的方法
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- 页面间传递数组自己所使用的2种方法
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- php中使用url传递数组的方法
- 页面间传递变量的方法及使用范围的讨论
- Android中在Activity之间传递数据的另一种方法, 使用application context
- 使用JdbcTemplate模板时传递的参数Map和Object []数组
- Visual C#2005——如何使用ToArray方法返回一个强类型数组
- java学习之旅56--数组_StringBuilder和StringBuffer的使用_常用方法_方法链的实现_JDK源码分析
- PHP和JavaScript传递数组并使用dtree.js生成树
- js拖拽换位置,使用数组方法
- 在VB中创建和使用动态数组控件的方法总结