1.在matlab中输入命令:
mbuild -setup 安装编译器。(注意点:选择计算机上已有的VC/VS编译器,并输入相应的路径)
2.在matlab中输入命令:
deploytool 进入该模式
3.按新建按钮,选择C++ Shared Library,进行工程的命名,并选择路径。然后Add Files,将要转换的M文件选择好。最后,build the project,编译该M文件。编译成功后,代码会生成在指定目录的distrib文件夹下。该文件夹下生成了一个dll文件,一个头文件和一个lib文件。(这里要注意的是matlab是分32位版本和64位版本的,用相应版本matlab按照这个流程走下来生成的是相应版本的dll文件和lib文件。所以,在vs中调用的时候要调整成相应的版本。比如用64位的matlab生成的dll和lib文件要在VS中的x64平台下运行,不然会产生Link error。要注意平台的统一,VS中有些控件,比如COMM控件只支持32位,这样为了统一使用,前面也要用32位的matlab)
4.将第3步生成的文件复制到VS工程中。
将matlab/extern下的include文件夹复制到VS的工程中,并在VC++目录的包含目录中添加进去。
将matlab/extern /lib/win64/microsoft下的libmat.lib,mclmcr.lib,mclmcrrt.lib复制到VS工程中,并在链接器/输入/附加依赖项中添加这几个库。
5.在代码中调用dll。
(1)初始化库 mclInitializeApplication(NULL,0)
xxxInitialize() xxx为第3步生成文件的名字
(2)对mwArray的操作
如matlab中一阶小波消噪函数wden(in1,in2,in3,in4,in5,in6);
转化后变成这样:
extern LIB_wden_CPP_API void MW_CALL_CONV wden(int nargout, mwArray& xd, mwArray& cxd, mwArray& lxd, const mwArray& in1, const mwArray& in2, const mwArray& in3, const mwArray& in4, const mwArray& in5, const mwArray& in6);
nargout ——— 输出变量的个数
xd —— 输出变量 消躁后的信号
cxd ——输出变量 xd的子小波
lxd —— 输出变量 xd的子小波
in1 —— 输入变量 原始信号
in2 —— 输入变量 阈值选择规则 可选模式:'rigrsure','heursure','sqtwolog','minimaxi'
in3 ——输入变量 软阈值或硬阈值 可选模式: ‘s’ or 'h'
in4 —— 输入变量 阈值尺度的改变 可选模式:‘one’,'sln','mln'
in5 —— 输入变量 小波变换的层数
in6 —— 输入变量 小波类型 如'db10','sym8'
例子:要实现XD_Filter = wden(XD,‘minimaxi’,'s','mln',5,'db10');的功能 。代码如下:
const int DataNum = 5500;
char str1[9] = "minimaxi";
char str2[2] = "s";
char str3[4] = "mln";
int str4 = 5;
char str5[5] = "db10";
mwArray Str1(str1);
mwArray Str2(str2);
mwArray Str3(str3);
mwArray Str4(str4);
mwArray Str5(str5);
mwArray XD(DataNum, 1, mxDOUBLE_CLASS);
mwArray XD_filter(DataNum, 1, mxDOUBLE_CLASS);
mwArray cxd(DataNum,1, mxDOUBLE_CLASS);
mwArray lxd(DataNum,1, mxDOUBLE_CLASS);
XD.SetData(in, DataNum);
wden(1, XD_filter, cxd, lxd, XD, Str1, Str2, Str3, Str4, Str5);
XD_filter.GetData(out, DataNum);
(3)为了以后方便使用可以进一步将该工程的类写成dll形式。