|
楼主 |
发表于 2008-3-21 18:14
|
显示全部楼层
刚才在仿真论坛的一位高手指导下进行了一些修改。现在不报错误了。但是返回数值的data数值全为0
我在Matlab中做了一个函数如下:
function y1=ARMA(a,b,c)
yy=a';
z=iddata(yy(1:21));
m=armax(z,'na',b,'nc',c);
y=predict(m,yy,1);
y1=y';
end
在Matlab7中编译成了COM组件没有问题。
但是在vc中调用组件就出现了问题,程序如下
if(FAILED(CoInitialize(NULL)))
{
AfxMessageBox("unable to initialize COM");
return;
}
double A[24]={2.9624,3.2691,3.2835,3.3561,3.2836,3.2707,3.2963,3.4147,3.2958,3.431,3.4138,3.6182,5.8616,5.9554,5.7033,4.1007,4.5352,3.9623,3.4714,3.6218,3.741,3.712,10.12312,12.2423};
IARMA *st=NULL;//创建一个com组件
HRESULT hr=CoCreateInstance(CLSID_ARMA,NULL,CLSCTX_ALL,IID_IARMA,(void * *)&st);
if(SUCCEEDED(hr))
{
//定义输入变量并初始化
VARIANT a,b,c;//a表示输入数据组,b与c表示ARMA模型阶数
VariantInit(&a);
VariantInit(&b);
VariantInit(&c);
a.vt=VT_ARRAY|VT_R8;//类型(数组,双精度)
b.vt=VT_R8;
c.vt=VT_R8;
//创建一维数组
SAFEARRAYBOUND ubound[1];
//数组元素个数
ubound[0].cElements=24;
//数组元素所引的下界
ubound[0].lLbound=0;
a.parray=SafeArrayCreate(VT_R8,1,ubound);
a.parray->pvData=A;
b.dblVal=3;
c.dblVal=2;
VARIANT out;//输出数据的指针
VariantInit(&out);
out.vt=VT_ARRAY|VT_R8;//数据类型为数组型
//创建一维数组
SAFEARRAYBOUND bound[1];
//数组元素个数
bound[0].cElements=24;
//数组元素所引的下界
bound[0].lLbound=0;
out.parray=SafeArrayCreate(VT_R8,1,bound);
int count=24;
double data[24];//存放输出数据
st->ARMA(1,&out,a,b,c);//调用com中的ARMA模型进行预测
memcpy(data,out.parray->pvData,count*sizeof(double));//将数据从VARIANT类型拷出给data
int i=0;
}
else
{
AfxMessageBox("创建com失败!");
}
每次运行就是在memcpy中出现问题,请高手给予帮助 |
|