关于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++可调用的库函数:
其中,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
//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);//函数调用 [第一个参数表示输出参数的个数这里有一个]
strtext.Format("%.f", *(mxGetPr(out)+i*m_size+j));
cout << strtext <
③终止:libtestTerminate();//终止进程
mclTerminateApplication();//终止MCR