环境:WIN10 64位+VS2013专业版+Matlab2015bWin32
实现功能:Matlab2015bWin32将函数生成动态库,在VS2013中调用。
具体实现过程:
首先添加环境变量和确认是否适合混合编程:
打开matlab,在工作空间中输入mex –setup,回车。
当弹出如上图,说明matlab支持VS2013和VS2015,本教程使用的是VS2015,可以进行混合编程。
开始实现混合编程:
Matlab:
在工作空间中输入:deploytool,弹出compile窗口,选择Library Compiler;
这里我的.m文件如下:
选择C++ Shared Library后,点击右侧加号,选择需要生产的.m文件。
点击Settings,弹出文件选择路径,选择文件生成的路径。最后点击Package。开始生成动态文件。
可以关闭matlab。开始VS操作。
打开生成的打包文件下的for_redistribution_files_only文件夹,将生成的dll、h、lib文件复制到VS工程下
Matlab文件:
首先新建VS c++工程(过程省略)。我建的工程名为Add。将刚才的复制文件放在指定VS路径下。
VS路径
右击解决方案资源管理器Add,并选择属性项。这里平台选择活动(Win32)
在配置属性->VC++目录
在包含目录中添加:matlab安装路径\MATLAB\R2015b\extern\include;
在库目录中添加:matlab安装路径\MATLAB\R2015b\extern\lib\win32\microsoft;
在配置属性->连接器->输入
附加依赖项中添加:
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
Add.lib
主程序:
#include<iostream>
//#include "Add.h"
#include "Add.h"
using namespace std;
int main()
{
if (!AddInitialize())
{
return -1;
}
int a = 20, b = 10; // double a = 20.0, b = 10.0;
int c; // double c;
mwArray mwA(1, 1, mxINT32_CLASS); // mwArray mwA(1, 1, mxDOUBLE_CLASS);
mwArray mwB(1, 1, mxINT32_CLASS); // mwArray mwA(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxINT32_CLASS); // mwArray mwA(1, 1, mxDOUBLE_CLASS);
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
Add(1, mwC, mwA, mwB);
c = mwC.Get(1, 1);
cout << c << endl;
AddTerminate();
}
最终运行结果:
前一段时间在用,今天又拾起来了,怕忘,总结一下。