雨落空林 发表于 2015-3-28 16:32:27

vc调用com传递数组问题

制作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;


rgsabound.cElements=n;    //数组所含元素数
rgsabound.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调用写成了函数的形式,传递三个数组和大小给该函数就可以了
页: [1]
查看完整版本: vc调用com传递数组问题