Chinaunix首页 | 论坛 | 博客
  • 博客访问: 105698
  • 博文数量: 29
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 47
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 16:46
文章分类
文章存档

2014年(20)

2013年(4)

2012年(5)

我的朋友

分类:

2012-12-21 13:46:27

原文地址:vc调用com传递数组问题 作者:devil_v6

制作com组件和调用的相关步骤在前篇中已经说明了,基本步骤相同.不同的是前边例子是传递的参数,现在来传递数组.
1,制作com组件
2,添加类,初始化代码,GUID码
3,调用代码,这段代码可以和单参数传递的比较下.
void datazs::paint_time(double aa[], double bb[], double cc[], int n)
{
/*
     参数说明:
              time_pRsp为接口调用参数,定义在前续文件中
              s为返回值
              x,y,z用来传递数组
              N表示数组所含元素
     */
    time_pRsp.CreateDispatch(CLSID_function_time,NULL); //创立接口
    //定义数组
 VARIANT s;//返回值
 VARIANT x;//传递数组
 VARIANT y;
 VARIANT z;
 //初始化
    VariantInit(&s);
 VariantInit(&x);
 VariantInit(&y);
 VariantInit(&z);
 s.vt=VT_R8;//类型(双精度型)
 
 s.dblVal=0.0;
 LONG para = 0;//返回参数个数
 
 x.vt=VT_ARRAY|VT_R8; //类型(数组,双精度型)
 y.vt=VT_ARRAY|VT_R8;
 z.vt=VT_ARRAY|VT_R8;
 SAFEARRAYBOUND rgsabound[1];
 
 
 rgsabound[0].cElements=n;    //数组所含元素数
 rgsabound[0].lLbound=0;   //数组上界
 //创立数组
 x.parray=SafeArrayCreate(VT_R8,1,rgsabound);  //创立一维数组
 y.parray=SafeArrayCreate(VT_R8,1,rgsabound);
 z.parray=SafeArrayCreate(VT_R8,1,rgsabound);
 //锁定数组
 SafeArrayLock(x.parray);
 SafeArrayLock(y.parray);
 SafeArrayLock(z.parray);
 //数组传递数据
 x.parray->pvData=aa;
 y.parray->pvData=bb;
 z.parray->pvData=cc;
 //调用方法
 time_pRsp.myfunn(x,y,z);
 //解锁
 SafeArrayUnlock(x.parray);
 SafeArrayUnlock(y.parray);
 SafeArrayUnlock(z.parray);
 time_pRsp.DetachDispatch();
 time_pRsp.ReleaseDispatch();
}
这里把com调用写成了函数的形式,传递三个数组和大小给该函数就可以了
阅读(1278) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~