我在VC编程中使用Matlab引擎编程时,将matlab中的数据传送到VC,采用了如下操作:可不知为什么总是出现错误,哪位高手可以指点一下,谢谢了!!
mxArray *result=NULL;
result=engGetArray(MatEngine,MatVarName);
data=mxGetPr(result);
通过调试发现问题就出在最后一句。

解决方案 »

  1.   

    VC中调用MATLAB示例代码 详细信息 < 杂项 >  本代码演示了如何在VC下调用MATLAB[代码性质] VC完整应用程序代码
    [代码作者] 殷延伟
    [文件大小] 17K 
    [更新日期] 2003-7-13 10:53:00 
    [下载次数] 52 
    http://www.vckbase.com/code/downcode.asp?id=2053
     
      

  2.   

    如果你的设置没有问题,
    应该不会出现错误的。
    你先看看你定义的data是不是指针变量,
    而且要保证这个指针变量的类型和
    MatVarName在MATLAB中的数据类型一样(或者可以兼容)。要是再不行
    贴上你的源代码
    有空帮你看看。
      

  3.   

    data=mxGetPr(result);要改为
    double* data=mxGetPr(result->GetData());
      

  4.   

    谢谢大家的回复!!
    源代码如下:
    void CMatlabTestView::OnMatlabAllself() 
    {
        double time[10]={0,1,2,3,4,5,6,7,8,9},*pData;
        mxArray *T=NULL,*d_result;
        CString *result=NULL,string;
        Engine *Myengine2;
        if(!(Myengine2=engOpen(NULL)))
       {  MessageBox("Error in Opening Engine!","haha",MB_OK);
          return; }
        T=mxCreateDoubleMatrix(1,10,mxREAL);
        mxSetName(T,"T");
        memcpy((char *)mxGetPr(T),(char *)time,10*sizeof(double));
        engPutArray(Myengine2,T);
        engEvalString(Myengine2,"D=05*(-9.8)*T^2;");
        d_result=engGetArray(Myengine2,"D");
        pData=(double *)mxGetPr(d_result);//调试时此句出错
        int *Dimension=(int *)mxGetDimensions(d_result);
        long total=1;
        int i;
        for(i=0;i<mxGetNumberOfDimensions(d_result);i++)
    total+=Dimension[i];
        result=new CString[total];
        for(i=0;i<10;i++) string+=result[i]+"\n";
        MessageBox(string,"haha",MB_OK);
        engEvalString(Myengine2,"plot(T,D);");
        mxDestroyArray(T);
        mxDestroyArray(d_result);
        engClose(Myengine2);
    }
      

  5.   

    你的程序有点小问题
    可能是你疏忽了
    以前的:
    engEvalString(Myengine2,"D=05*(-9.8)*T^2;"); 改为现在的
     engEvalString(Myengine2,"D=5*(-9.8)*T.^2;");
    就可以了
    我调试过了
      

  6.   

    To CrazyJay:
        谢谢你的回复,问题解决了。
        我刚刚涉及这方面的内容,对很多东西都还不是很明白,你能帮我解释一下下面这段程序对应每一步的具体含义么?mxGetDimensions和mxGetNumberOfDimensions这两个函数我在帮助文档中没有找到,只是从字面意思上摸索着来的。
        麻烦你了!解决完我马上给你加分!!
        int *Dimension=(int *)mxGetDimensions(d_result);
        long total=1;
        int i;
        for(i=0;i<mxGetNumberOfDimensions(d_result);i++)
    total+=Dimension[i];
        result=new CString[total];
        for(i=0;i<10;i++) string+=result[i]+"\n";
      

  7.   

    ljljmgm:
           不用客气,再说我也是对此只知一二,大家互相学习。
           const int* mxGetDimensions(const  mxArray *array_ptr);
           获得一个指向阵列维数大小的数组的指针。该指针指向的数组的元素包含了阵列每一维的大小,其中数组的第一个元素为阵列的行数,第二个为列数,第三个为阵列的页面数,以此类推。
            int mxGetNumberOfDimensions(const  mxArray *array_ptr);
            获得阵列的维数。
           
             PS:你按照函数的字面理解也是可行的,
                其实很多时候,你要多试,时间长了,你就会了,好运!