本人使用的VS2010(32位)和Matlab2014a(64位)
1.在Matlab中写一个简单的加法函数,例如
function c = add(a,b)
c = a + b;
end
保存为add.m文件。
在命令窗口输入 mex -setup命令,选择 “mex -setupC++”
继续输入mbuild -setup,然后选择“mex -setup C++ -client MBUILD”
继续输入deploytool,然后选择library compiler
然后等待运行成功即可
生成3个文件
选择“for_redistribution_files_only”这个文件夹中的“add.dll”“add.h”“add.lib”的这三个文件
2.在MFC下新建一个控制台应用程序。
1>新建工程后进行配置。
选择生成->配置管理器,在活动解决方案选择×64,设置好关闭即可
2>选择项目名称右击选择属性
a.在属性页面,左侧选择VC++目录将包含目录修改为自己matlab中“MATLAB\R2014a\extern\include”和“MATLAB\R2014a\extern\include\win64”所在路径
“D:\Program Files\MATLAB\R2014a\extern\include”
“D:\Program Files\MATLAB\R2014a\extern\include\win64”(这是我自己的路径)
库目录修改为自己matlab中“MATLAB\R2014a\extern\lib\win64\microsoft”所在路径
“D:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft”
b.然后选择链接器->输入->修改附加依赖项
“libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
add.lib”(最后一个是自己的文件)
将这几项添加至附加依赖项中
(图中没有显示全部,要把那些全部写进去)
然后点击确定即配置完成。
3>将“add.dll”“add.h”“add.lib”这3个文件拷贝至自己建立的控制台程序中,并将“add.h”文件添加至项目中
3.在vs中实现调用matlab.dll代码如下
#include "stdafx.h"
#include "engine.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "add.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if(!addInitialize())
{
std::cout<<"错误..."<<std::endl;
return -1;
}
double a = 6;
double b = 9;
double c;
mwArray mwA(1, 1, mxDOUBLE_CLASS);
//mwArray将此变量转换为1×1的矩阵
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
mwA.SetData(&a, 1);
//SetData第二个参数为设置的数的个数,大小可设为rows*cols
mwB.SetData(&b, 1);
add(1, mwC, mwA, mwB);
c = mwC.Get(1,1);
cout<<c<<endl;
system("PAUSE");
return 0;
}
运行该程序便可实现vs与matlab混合编程。
运行结果如下图所示: