VS通过动态链接库调用MATLAB函数
实际上,有两种调用方式,一种是通过在vs中通过engine来调用MATLAB函数,但是这种情况要通过cmd先打开MATLAB,使得MATLAB可以被vs所指挥。另一种就是这里将要介绍的方法,该方法在调用函数时,无需事先打开MATLAB。
将MATLAB函数编译为库
这是第一步,首先将需要使用的MATLAB 函数编译为链接库等文件。
- 在MATLAB命令行输入 mex -setup ,如图所示;
2.选择 C++那一个,如图所示;
3.在MATLAB命令行输入 mbuild -setup ,如图所示;
4. 还是选择 C++那一个,如图所示;
5. 在MATLAB命令行输入 mcc -W cpplib:Dataprocess -T link:lib Dataprocess.m (这里的Dataprocess就是自己需要编译成库的MATLAB函数的名称,以及转换成的库的名称),如图所示;
6. 回车之后,不会立马出现结果(此时在转换过程中),静候!一会就会出现如下结果;
7. 此时,即可查看MATLAB函数文件路径下已经出现了一堆文件,如图所示;
在VS中调用库
1.打开VS,新建空项目;
2.配置项目环境,项目->属性->配置管理器,改成×64,如图所示;
3.VC++ 目录->包含目录,加入D:\MATLAB\matlab\extern\include路径;
4.VC++ 目录->库目录,加入D:\MATLAB\matlab\extern\lib\win64\microsoft;
5.链接器->输入->附加依赖项,添加libeng.lib;libmat.lib;libmex.lib;libmx.lib;mclmcrrt.lib;mclmcr.lib;Dataprocess.lib,(其中最后一个是刚刚MATLAB编译生成的其中一个)如图所示;
6.将MATLBA生成的.h和.lib和.dll三个文件复制到该项目的文件路径下,如图所示;
7.添加新建main.cpp文件,如图所示;
#include <string>
#include "Dataprocess.h"
using namespace std;
int main()
{
if (!DataprocessInitialize());
int updown = 1;
char InputFile[] = "D:\data\PCDFile\LooseCoil-SVG5-SOR5-Up.txt";
char OutPutFile[] = "D:\data\Features\OverflowEdgeCoil_Feature.txt";
mwArray mwA_updown(1, 1, mxINT32_CLASS);
mwA_updown.SetData(&updown, 1);
mwArray mwA_InputFile(InputFile);
mwArray mwA_OutputFile(OutPutFile);
Dataprocess(mwA_InputFile, mwA_OutputFile, mwA_updown);
return 0;
}
8.运行程序,即可完成函数的调用(注意mwArray的使用方法);