准备好动态链接库
用matlab生成好C++的动态链接库
pro文件
INCLUDEPATH += $$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/extern/include)
INCLUDEPATH += $$PWD/.
INCLUDEPATH += $$PWD/algorithm/.
INCLUDEPATH += $$PWD/custom_widget/.
INCLUDEPATH += $$PWD/dialog/.
INCLUDEPATH += $$PWD/curve/.
DEPENDPATH += $$PWD/.
DEPENDPATH += $$PWD/algorithm/.
LIBS += -L$$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/extern/lib/win64/microsoft)
LIBS += -llibmx -lmclmcrrt -llibmat -lmclmcr
LIBS += -L$$PWD/./algorithm/ -lDts
LIBS += -L$$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/runtime/win64)
其中要添加对应的路径,找到自己安装的matlab路径添加对应的
INCLUDEPATH += $$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/extern/include)
LIBS += -L$$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/extern/lib/win64/microsoft)
LIBS += -llibmx -lmclmcrrt -llibmat -lmclmcr
LIBS += -L$$quote(C:/Program Files/MATLAB/MATLAB Runtime/v98/runtime/win64)
同时也要添加对应路径的dll
LIBS += -L$$PWD/./algorithm/ -lDts
我这里是工程目录下的algorithm目录下的Dts.dll
同时也要将Dts.h的文件添加入工程中来。
调用注意
mclmcrInitialize();
mclInitializeApplication(nullptr, 0);
DtsInitialize();
首先要调起matlab运行支持库前2个函数是matlab自己的,最后的DtsInitialize()是自己生产的dll文件中带有的,基本和自己的dll文件名同名。
然后在程序中使用dll内的函数,例如:
mlfFlat();
最后使用完成后要调用结束matlab
DtsTerminate();
mclTerminateApplication();
mxArray使用:
mxArray* n = mxCreateDoubleMatrix(1, 1, mxREAL);
memcpy(mxGetPr(n), polyfitTimesVector.data(), sizeof(double) * polyfitTimesVector.size());
mxDestroyArray(n);
先要给mxarray定义空间,然后用memcpy函数将QVector拷贝到其中,用完用mxDestroyArray释放mxarray。