当前位置: 首页 > news >正文

【Qt-17】Qt调用matlab生成的dll库

matlab生成dll库

1、matlab示例代码

function BDCube(x,y)[x,y,z] = cylinder(x,y);t1 = hgtransform;s1 = surf(3*x,3*y,4*z,'Parent',t1);grid onview(3)shading interp
end

2、matlab环境配置

首先检查自己的mcc编译器是否可用,输出以下命令:

!mcc

若正常,出现以下结果:

其次在命令行输入以下内容:

mbuild -setup

 

由于我们在C++环境下开发,故选择带C++的选项。

 最后在命令行输入以下命令:

mex -setup

同样选择带C++的选项。

3、打包dll

Qt调用dll

1、拷贝

将matlab生成for_redistribution_files_only文件夹下*.dll、*.h、*.lib文件拷贝到Qt项目目录下。

2、 在Qt下添加matlab相关库

INCLUDEPATH += $$quote(D:/softWare/matlab/extern/include)
INCLUDEPATH += $$quote(D:/softWare/matlab/extern/include/win64)INCLUDEPATH += $$quote(D:/softWare/matlab/extern/lib/win64/microsoft)
DEPENDPATH += $$quote(D:/softWare/matlab/extern/lib/win64/microsoft)
INCLUDEPATH += $$quote(D:/softWare/matlab/extern/lib/win64)
DEPENDPATH += $$quote(D:/softWare/matlab/extern/lib/win64)win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -llibmx
win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -llibmat
win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -llibmex
win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -llibeng
win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -lmclmcr
win32: LIBS += -L$$quote(D:/softWare/matlab/extern/lib/win64/microsoft) -lmclmcrrt

注意:改写成自己安装matlab的位置,$$quote()当路径中有空格可正常引入。

3、添加matlab库

项目右击—添加库—外部库,选择matlab库文件。

添加成功后,会在pro文件中自动填入以下内容:

4、添加matlab头文件

 项目右击—添加现有文件,选择上述拷贝到QT项目文件夹下的头文件。

5、QT调用

首先进行初始化,

if(BDCubeInitialize()){qDebug() << "初始化成功!";}else{qDebug() << "初始化失败!";}

然后引入头文件,即可调用。

#include "untitled4.h"...
mwArray aa(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray bb(1, 1, mxDOUBLE_CLASS, mxREAL);
double a[1] = { 2 };
double b[1] = { 200 };
aa.SetData(a, 1);
bb.SetData(b, 1);
BDCube(aa, bb);

mwArray是C++向matlab传递i/o参数,matlab中的参数是矩阵表示的。mwArray aa(1, 1, mxDOUBLE_CLASS, mxREAL)代表是1*1的矩阵,即只有一个数据。

完整示例代码:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include "BDCube.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);if(BDCubeInitialize()){qDebug() << "hhehe";}else{qDebug() << "ddhioeeh";}}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{mwArray aa(1, 1, mxDOUBLE_CLASS, mxREAL);mwArray bb(1, 1, mxDOUBLE_CLASS, mxREAL);double a[1] = { 2 };double b[1] = { 200 };aa.SetData(a, 1);bb.SetData(b, 1);BDCube(aa, bb);
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;public slots:void on_pushButton_clicked();};
#endif // MAINWINDOW_H

运行结果:

问题解决:

解决方法: 调试—窗口—异常设置,取消Win32 Exceptions勾选。

http://www.lryc.cn/news/168788.html

相关文章:

  • css经典面试题(二)
  • jira搜索search issue条目rest实用脚本
  • 《C++ primer plus》精炼(OOP部分)——对象和类(5)
  • 钉钉旧版服务端SDK支持异步方法的升级改造
  • 【C语言】【数据存储】用%d打印char类型数据,猜结果是啥
  • 算法——双指针
  • 【PowerQuery】Excel的PowerQuery按需刷新
  • Django REST Farmowork初探
  • 【flink进阶】-- Flink kubernetes operator 版本升级
  • Linux Ubuntu20.04深度学习环境快速配置命令记录
  • 信息安全三级真题一
  • RK3568-tftp更新设备树和内核nfs挂载文件系统
  • FIR滤波器简述及FPGA仿真验证
  • 高速信号处理板资料保存:383-基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡设计原理图
  • QT:使用分组框、单选按钮、普通按钮、标签、行编辑器、垂直分布、水平分布做一个小项目
  • 封装微信小程序隐私信息授权
  • 【C#】FileInfo类 对文件进行操作
  • python中的字符串也是可迭代对象吗?
  • C++ 图像线特征提取【HoughLinesP算法】
  • Stable Diffusion WebUI内存不够爆CUDA Out of memory怎么办?
  • 模板学堂|数据可视化仪表板大屏设计流程梳理
  • 基于Xml方式Bean的配置-Bean的延时加载
  • python之pyQt5实例:Matplotlib的应用
  • 智囊AI-基于 ChatGPT 的 AI 工具产品 你的私人AI助手
  • nginx配置vue前端代理
  • 【C语言】【数据存储】用%u打印char类型?用char存128?
  • git-git命令汇总
  • 自定义实现简易版ArrayList
  • React中的Hooks--useReducer()
  • DM@数理逻辑@命题公式及其赋值@真值表@公式分类