VS与matlab混合编程
1、安装vs2010以及matlab2013a,网上有很多安装教程,这里不详细赘述。

2、像系统中添加环境变量,步骤为:“计算机”--“属性”--“高级系统设置”--“高级”--“环境变量”--“系统变量”--“path”。


3、在path中添加C:\Program Files (x86)\MATLAB\R2013a\bin\win32(修改为你安装matlab的bin下面的win32目录);C:\Program Files (x86)\MATLAB\R2013a\bin(修改为你安装matlab的bin目录);
D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin(修改为你安装VS的VC下的bin目录);修改完成后点确定,然后重启计算机。


4、设置matlab编译环境,这里我们会生成.dll,.lib,.h这三类文件。具体步骤如下:打开matlab2013a,然后写个简单的script,如下图。接着打开matlab主窗格,输入mex -setup会提示你输入Y或N,我们选择y。然后选择编译器,我们选择VC++2010.


5、接着输入mbuild -setup,然后按照下图选择步骤进行就行。

6、接着输入 mcc -W cpplib:libMyAdd -T link:lib MyAdd.m,等待matlab生成.h,.lib.dll等文件,这个要比上面两个稍慢点。这里matlab配置完成。

7、打开VS2010,新建一个项目,注意是win32控制台程序。然后打开新建项目的属性页。进行如下配置。


8、在属性页里的VC++目录下的包含目录加入下面三个目录:C:\Program Files %28x86%29\MATLAB\R2013a\extern\include;C:\Program Files %28x86%29\MATLAB\R2013a\extern\include\win32;D:\mixsoftware\VSworkspace\JHY_Project\JHY_Project。【注意】上面的三个目录按照你的实际安装目录进行修改。每个人都可能不一样。

9、VC++目录下的库目录添加:C:\Program Files %28x86%29\MATLAB\R2013a\bin\win32;C:\Program Files %28x86%29\MATLAB\R2013a\extern\lib;D:\mixsoftware\VSworkspace\JHY_Project\JHY_Project;C:\Program Files %28x86%29\MATLAB\R2013a\extern\lib\win64\microsoft;C:\Program Files %28x86%29\MATLAB\R2013a\extern\lib\win32\lcc;C:\Program Files %28x86%29\MATLAB\R2013a\extern\lib\win32\microsoft。总共6个,仍然需要按照你的实际安装目录进行修改。

10、在“c/c++”中的“常规”里面的“附加包含目录”添加C:\Program Files %28x86%29\MATLAB\R2013a\extern\include,依旧按照你的实际安装目录进行修改。

11、在“链接器”下面的“常规”中的“附加库目录”添加 C:\Program Files %28x86%29\MATLAB\R2013a\extern\lib\win32\microsoft。老规矩,按照你安装的实际目录修改。

12、在“链接器”下面的“输入”中的“附加依赖项”添加:
libeng.lib libmat.lib libmex.lib libmx.lib mclmcrrt.lib mclmcr.lib libMyAdd.lib

13、最后把matlab生成的.h,.lib,.dll文件拷到你新建的项目的目录下。比如我把他们放到了D:\mixsoftware\VSworkspace\JHY_Project\JHY_Project里面。

14、粘贴下面的代码进行测试:
#include "stdafx.h"
#include "iostream"
#include "engine.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if(!libMyAddInitialize())
{
//initilize failed!!!"<<std::endl;
std::cout<<"错误..."<<std::endl;
return -1;
}
double a = 6;
double b = 9;
double c;
mwArray mwA(1, 1, mxDOUBLE_CLASS);
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
MyAdd(1, mwC, mwA, mwB);
c = mwC.Get(1,1);
cout<<c<<endl;
system("PAUSE");
return 0;
}
如果输入15,则说明配置成功。有错误的话就根据提示的错误进行修改。
