从COM中取出数据的代码:
         VARIANT input;//只有一个输入参数
VARIANT output;//输出参数
         VariantInit(&input);
input.vt=VT_I4;
input.iVal=4;
VariantInit(&output);
output.vt=VT_R8;
// 调用COM组件的方法
arrayy.tryarray(1,&output,input);//调用tryarray组件。
     double *nRes;
    nRes= new double[1];
// 获取计算的结果     nRes[0]=output.dblVal;
   m_edit=nRes[0];//m_edit是Edit类控件,显示输出值。
   UpdateData(FALSE);
}
在Vc6.0中执行结果为:0或者67........一长串数字,好像是double能显示的最大数。
函数tryarrayy的原型为:
void tryarrayy(int input)

double output;
output=3*input;
}这是怎么回事,我觉得好像没什么问题,请高手指点指点。

解决方案 »

  1.   

    tryarrayy()实际是一个matlab中的函数,在matlab中的定义是这样的:
    function output=tryarrayy(input)
    output=3*input;
    即output是一个输出参数。
      

  2.   

    在VC的OLE/COM对象查看器里面查看,这个函数的输入输出为:
    void tryarrayy(
                 [in] long nargout,
                 [in,out] VARIANT* safe,
                 [in] VARIANT num);
      

  3.   

    函数tryarrayy的原型为:
    void tryarrayy(int input)

    double output;
    output=3*input;
    }
    不懂matlab语法,但C语言的话这样写法double output可没法输出值哦
      

  4.   

    返回output后看一下vt值,不一定是double,为什么要用dblVal域,另外,你output.vt=VT_R8;这句没用,[in,out]型参数你设什么类型和调用者没什么关系,把output初始化了扔过去就可以了。tryarrayy的原型看不出output是什么类型,顾名思义的话应该是个数组。
      

  5.   

    是从matlab导出的com吗
    再研究研究混合编程的书,这地方常出问题
      

  6.   

    其实我这段代码就是按照书上的写的,只是把com的原函数换了,代码也稍微换了换,谁有类似的例子给我发一个吧,谢谢大家的指点了!!!