Matlab作为矩阵实验室,在算法设计上具有显著的优越性,然而在Matlab平台上编写的算法不能直接应用在C语言中。混合编程提供了二者的接口,加速了程序开发速度。下面介绍Matlab 与 VS2012 混合编程方法。
1. 打开Matlab,设置编译器:
输入 "mex -setup" 在命令窗口输出中 选择合适的编译器,本文中选择VS2012.
2. 输入“deploytool”,在随后弹出的窗口中选择“library compiler”, matlab启动dll生成程序。在程序界面中选择“+”号,输入.m文件,点击‘package’,打包生成dll文件。
3. 为VS正常调用dll文件设置环境变量
在环境变量设置界面“path”中增加以下内容:
C:\Program Files\MATLAB\R2016b\runtime\win64;
C:\Program Files\MATLAB\R2016b\extern\lib\win64\microsoft;
C:\Program Files\MATLAB\R20156b\bin\win64
4. 将VS编译方式设置为Release X64模式并为VS 增加包含文件和库
在VC++ 目录中 包含文件添加“Matlab安装目录\extern\include;
libmat.lib
libmex.lib
mclmcr.lib
mclmcrrt.lib
libemlrt.lib
libeng.lib
libfixedpoint.lib
libcovrt.lib
5. 新建VS工程,将2中生成的 .dll 文件,h 文件, .lib 文件复制到工程目录下.#include <stdio.h>
#include <iostream>
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "ImageRead.h"
using namespace std;
#pragma comment(lib,"ImageRead.lib")
int _tmain(int argc,_TCHAR* argv[])
{
char filename[] = "G:\\VS\\2_6\\ConsoleApplication1\\ConsoleApplication1\\lena.jpg";
if(!ImageReadInitialize()) //初始化
{
printf("Could not initialize addfunction!");
exit(0);
}
printf("OK!");
mxArray *t=NULL;
t = mxCreateString(filename);
mlfImageRead(t);
Sleep(5000);
ImageReadTerminate();
return 0;
}