VS2005调用MATLAB2010函数

  • 转载:http://www.blogbus.com/shijuanfeng-logs/108666611.html

    查看了网上的N多个版本,终于搞定了。 

    1. matlab:mex -setup 选择vs2005
    mbuild -setup 选择vs2005

    2. 写matlab函数:
    例如:function m=mypascal(n)  
    m=pascal(n);
    m=m';
    保存为:test.m

    3. 将matlab函数转为VC++可调用的库函数:
     mcc -W lib:libtest -T link:lib test.m 
    其中,libtest为生成文件的名字,test.m为要转换的m文件

    ——————————————————————————————————————————————————

    4. VS2005配置:Tools->Options->Projects and Solutions->VC++ Directions
    Include Files中添加:...\MATLAB\R2010b\extern\include
    lib Files中添加:...s\MATLAB\R2010b\extern\lib\win32\microsoft

    5.新建VS2005工程,将第3步生成的.h .lib .dll文件拷到该工程目录中,并添加如下配置:
    #include "libtest.h"
    linker->Input->Additional Dependencies: libtest.lib mclmcrrt.lib

    6.调用
    ① 初始化:if (!mclInitializeApplication(NULL,0))    
       {
    //AfxMessageBox("不能初始化程序");
       }    

    if (!libtestInitialize()) 
       {
    //AfxMessageBox("不能初始化连接库");
       }
    ②调用:double data;
    data=double(m_size);mxArray *size; //输入参数m_size可以是任意正整数
    mxArray *out=NULL; //输出参数

    //创建mxArray数据对象,双精度标量
    size=mxCreateDoubleScalar(data);

    //内存复制赋值
    memcpy(mxGetPr(size), &data, 1*sizeof(double));        

    mlfTest(1, &out, size);//函数调用 [第一个参数表示输出参数的个数这里有一个]

           CString strtext;

           for (i=0;i<m_size;i++)     
        for(j=0;j<m_size;j++)           
        {
    strtext.Format("%.f", *(mxGetPr(out)+i*m_size+j));
    cout << strtext <     }     

    ③终止:libtestTerminate();//终止进程   
    mclTerminateApplication();//终止MCR

你可能感兴趣的:(VS调用MATLAB函数)