首先我们需要在matlab编译器中配置好function函数,示例如下:
function SampEnVal = sampentropy(filePath)
filePath为调用文件路径。具体函数实现内容省略。
然后在matlab终端输入mbuild -setup,如下图
然后使用APP中的Library Compiler输出动态库。
配置参数如下图:
点击Package即可得到。
将for_redistribution_files_only文件里的 .dll .h .lib三个文件分别放入Debug、源文件、与lib文件夹里。再在QT里添加外部库。
包含头文件以及.pro文件加入matlab调用外部库,其中F:/MATLAB/extern/lib/win64/microsoft为matlab安装路径。
#matlab
INCLUDEPATH +=F:/MATLAB/extern/include
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -lmclmcr
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -lmclmcrrt
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -llibmx
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -llibmex
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -llibmat
LIBS += -LF:/MATLAB/extern/lib/win64/microsoft -llibeng
初始化后即可使用动态库API函数。。
if(!sampentropyInitialize()) { // 初始化,必须要使用
qDebug() << "sampentropy init failed.";
return;
}
qDebug() << "susss";
输出后的API函数形式如下:
void sampentropy(int nargout, mwArray& SampEnVal, const mwArray& filePath);
由此可见filePath本应传入为QString类型,但API定义为mwArray类型,由此需要进行类型转换。处理方法如下:
QString filePath = "F:/Data/data.txt";
// 将filePath转换为标准字符串
QByteArray byteArray = filePath.toLocal8Bit();
const char* stdFilePath = byteArray.constData();
// 将标准字符串转换为mwArray类型
mwArray mwFilePath(stdFilePath);
int nargout=1; // 输出变量个数
//样本熵 SampEnVal
mwArray SampEnVal(mxDOUBLE_CLASS, mxREAL);
sampentropy(nargout, SampEnVal,mwFilePath);
即可得到样本熵SampEnVal。