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