您的位置:首页 > 编程语言 > MATLAB

用VS2005(2008也同样)调用MATLAB2010的m文件函数

2011-12-18 15:15 369 查看
关于vs2008(2005)与matlab的其他的混合编程请看网摘,此处仅仅转载vc++怎么调用matlab自定义函数(即自己写的m文件函数)

 

http://blog.sina.com.cn/s/blog_5fd4166b0100pmk9.html

 一定要按如下配置好,特别注意的是第一步。否则不能初始化程序,而且所有矩阵相关操作不能进行内存分配

 

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息