目前一个音频项目需要用到Matlab,动作UI主要是C++写的,所以打算是Matlab编译成exe执行文件,然后再通过C++ 调用Matlab的执行文件,生成结果文件txt,上位机去Load;
Matlab 不动,记录一步一步的操作,以备将来只需;
1:在没有安装的电脑运行matlab的话,需要安装MCR, 其路径在安装的matlab的:[MATLAB安装目录]\toolbox\compiler\deploy\win64;文件名为“MCRInstaller.exe”; 执行步骤如下:
1)先把这个安装在新的电脑上面;
2)然后配置环境,点击“我的电脑” “属性”,“高级”,“环境变量”,“添加”指定一个变量名,然后将路径C:\Program Files\MATLAB\MATLAB Compiler Runtime\v80\runtime\win64复制到里面就可以了(安装路径)。
2:如何把Matlab编译成exe程序,首先创建m文件,然后在命令窗口输入: "mcc -m xx.m",xx.m是你需要编译的m文件,如果你想去掉matlab执行的dos窗口,可以把编译命令改为“mcc -e xx.m”;
3:Matlab读写txt文件:
fid = fopen(文件名,‘打开方式’);
说明:fid用于存储文件句柄值,如果fid>0,这说明文件打开成功。打开方式有如下选择:
‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。该文件必须已存在。
‘w’:打开后写入数据。该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。
‘a’:在打开的文件末端添加数据。文件不存在则创建。
‘a+’:打开文件后,先读入数据再添加数据。文件不存在则创建。
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
最基本的写入txt文件方法:
%(matlab 与 C++ 类型指代相同) %d-->int %f-->float %lf-->double %s-->string
a = 4; b = 4.3; c = 'name';
fid = fopen(path,'w');
fprintf(fid,'%d %f %s\n',a,b,c);
fclose(fid);
最基本的读入txt文件大方法:
file = fopen(filename,'r');
data = fscanf(file,'%s');
flcose(file);
//2018-2-26续,发现c++ 调用matlab的话很慢,所以该用dll的形式,这样就只会是第一次比较慢
1:怎么编译成dll?
示例:将一个Matlab函数MyFun 编译成libMyFun 的命令:
mcc –W cpplib:libMyFun –T link:lib MyFun
参数说明:-W控制编译之后的封装格式,cpplib表示c++的lib,冒号之后是编译输出lib名,-T表示目标,link:lib表示连接到lib的目标,MyFun是待编译的m文件名,编译成功之后,会输出三个文件:libMyFun.lib libMyFun.dll libMyFun.h
2:C++的环境配置:
将前面生成的mydll.dll、mydll.h和mydll.lib三个文件拷贝到新建的C++工程目录中,并将mydll.h加入工程,将并设置工程属性。
- 项目属性——VC++目录——包含目录:
- 项目属性——VC++目录——库目录:
- 项目属性——链接器——输入:
mclmcrrt.lib
mydll.lib(这是自己生成的)
function[sum] = Add(n)
sum = 0;
for i=1:n
sum = sum + i;
end
end
//添加初始化函数
if(!AddInitialize())
{
printf_s(“initial Matlab function fail”);
return -1;
}
mwArray sum(1,1,mxINT32_CLASS);
mwArray n(1,1,mxINT32_CLASS);
int num = 3;
n = num;
Add(1,sum,n);
addTerminate();