看流星社区

 找回密码
 注册账号
查看: 2011|回复: 0

vc调用com传递数组问题

[复制链接]

该用户从未签到

发表于 2015-3-28 16:32:27 | 显示全部楼层 |阅读模式
制作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调用写成了函数的形式,传递三个数组和大小给该函数就可以了
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 23:45

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表