准备工作
1、配置MATLAB环境
控制面板->所有控制面板项->系统->高级系统设置->高级->环境变量
系统变量,新建,添加Matlab地址,变量名:maltab,变量值:C:\Program Files\MATLAB
Path一栏,后面追加:C:\ProgramFiles\MATLAB\R2016b\bin\win64 (32位为win32)
更改环境变量后,请重启电脑,否则VS将出现:LINK : fatal error LNK1104: 无法打开文件“libeng.lib”
2、配置MATLAB中的C++编译器
打开Matlab,命令行窗口输入 mex -setup
点击选择 mex -setup C++
配置完成后,进行第二步。
生成DLL文件
1,编写m文件
打开Matlab,新建函数
2,导航栏,应用程序,Application Compiler,新建Library Compiler Project,
TYPE选择C++ Shared Library,加号添加sum_prod.m文件,点击绿√Package。
3,Matlab编译后会在sum_prod.m所在文件夹下生成同名文件夹,打开分别是:
for_redistribution
for_redistribution_files_only
for_testing
打开for_redistribution_files_only,其中dll,lib,h是我们需要的文件,至此,Matlab方面就已经设置妥当了。
创建MFC项目文件
如果64位MATLAB生成的dll,那么VS编译目标平台也应该是x64,否则出错。
1,配置项目
将上述文件dll,lib,h文件拷贝到项目目录下。
添加include路径:C:\Program Files\MATLAB\R2016b\extern\include
添加lib路径:C:\Program Files\MATLAB\R2016b\extern\lib\win64\microsoft
C:\Program Files\MATLAB\R2016a\bin\win64
添加附加lib(附加依赖项):linker->input 追加
xxxx.lib; libeng.lib;libmx.lib; libmat.lib; mclmcr.lib;mclmcrrt.lib;
xxxx.lib是自己的M文件mcc生成的,使用#pragma comment(lib,"xxxx.lib")在主cpp文件中添加
以上根据自己的路径修改
库文件不能少,否则可以看到熟悉的编译报错:error LNK2019: 无法解析的外部符号
2、函数使用
其用于加载和卸载需要用到的dll,最后有一个判断,如
if( !xxxInitialize() )
{
std::cerr << "Could not initialize the library properly"
<< std::endl;
return -1;
}
程序调用dll中的函数前,必须先调用xxxInitialize()这个函数,xxx指的是函数名称。程序结束时,要调用xxxTerminate()。
关于mwArray类的使用
mwArray类作为函数体的输入输出变量,扮演很重要的角色,在使用函数之前,务必把mwArray查清楚
编译运行