环境:matlab2018a ; visual studio2017
一、写好matlab函数,这里设为resCode.m
二、接下来生成c++所需文件
步骤1:mex -setup
点击选择mex -setup C++
步骤2:mbuild -setup
点击选择mex -setup C++ -client MBUILD
步骤3:mcc -W cpplib: resCode -T link:lib resCode.m -C
resCode是你的dll名称,可以自定义,resCode.m就是你的m文件名称
解释:
-W是控制编译之后的封装格式;
cpplib是指编译成C++的lib,如果需要编译成C的lib,就用lib即可,去掉cpp;
cpplib后面的是需要生成文件的文件名,是自己取的,我们取名为resCode;
-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字。
其他具体含义可以通过mcc –help命令查看,注意参数的大小写。
需要用到的文件只有四个:resCode.ctf,resCode.dll,resCode.lib,resCode.h。
三、C++配置部分
创建工程文件,注意:测试环境使用的是64位操作系统,因此务必在x64环境下进行以下配置。(这是与你的matlab版本匹配的,我的matlab安装的是64bit的)
第一步:VC++目录
假设Matlab安装目录为D:\Matlab2018a,这个根据本机安装目录自行调整。
包含目录:D:\Matlab2018a\extern\include
D:\MATLAB 2018a\extern\include\win64
D:\project\IMU_PointCloud_predict\workspace //工程的工作目录
库目录:D:\Matlab2018a\extern\lib\win64\microsoft
第二步:链接器->输入->附加依赖项,添加以下库
mclmcrrt.lib
libmat.lib
libmx.lib
mclmcr.lib
resCode.lib //自己生成的lib文件
第三步:配置系统变量
“我的电脑”右键,打开“属性”;选择“高级系统设置”;找到系统属性页面的“高级”选项,右下方“环境变量”;页面中下方是系统变量,将Path设置为D:\Matlab2018a\bin\win64
进行完以上配置后,将电脑进行重启(让环境变量生效)。
第四步:重新打开VS2017的项目,将Matlab生成的四个文件放入该项目所在文件夹下。(注意:我看了网上很多教程,放在哪里哪里,但是最终试了一下,只需要把四个文件放在工程底下即可,上面配置配置完成即可,这一步非常重要)。
第五步:调试–>窗口–>异常设置–>Win32 Exceptions全部不要勾选。
至此完成VS的配置
四、测试部分(这里展示字符串如何作为参数输入到matlab函数)
这是我写的matlab函数,输入参数为字符串
这是c++调用matlab程序:
有几点注意点:一定要初始化两句:
mclInitializeApplication(NULL, 0)
resCodeInitialize() //resCode是你的函数名字
其次,不管想把矩阵或者字符串作为参数输入到Matlab中,都要变成mwArray格式的参数,才能调用函数输入参数。这里展示字符串作为参数。
说明:
residualPath是string类型,上面是mwArray类形式的一部分,想看全部可以去看内部函数。它可以把const char* str作为参数将字符串变成mwArray,又因为string a.c_str()返回的类型也是const char*类型,因此可以将字符串转成mwArray类型,然后才能当作参数输入到matlab函数。最后加上结束调用resCodeTerminate()。
参考:C++中调用matlab的dll文件(解决初始化失败的问题)_Be busy living or busy dying-CSDN博客_mclinitializeapplication失败