VS(QT)调用Matlab函数的方法

配置

  • Matlab2024a 64位
  • MATLAB Runtime 2024
  • VS2017 MSVC
  • VS-QT插件

步骤

编写matlab测试代码:

matlab 复制代码
function y = myfunc(a, b)
    % a, b 是 double 矩阵或向量
    y = a * b;
end

输入mex -setup C++

选择Microsoft Visual C++ 2017

输入deploytool选择

将生成的.h和.lib分别放置在对应的文件夹

附加包含目录:

cpp 复制代码
C:\Users\woshi\source\repos\QT_Matlab\include
D:\Program Files\MATLAB\R2024a\extern\include
D:\Program Files\MATLAB\R2024a\extern\include\win64

附加库目录:

cpp 复制代码
C:\Users\woshi\source\repos\QT_Matlab\lib
D:\Program Files\MATLAB\R2024a\extern\lib\win64\microsoft

附加依赖项:

cpp 复制代码
func.lib
mclmcrrt.lib
libmat.lib
libmx.lib

选择Realse x64

调试-->窗口-->异常设置-->Win32 Exceptions全部不要勾选

VS代码:

cpp 复制代码
#include "QT_Matlab.h"
#include <QLabel>
#include <QDebug>
#include <QPushButton>

QT_Matlab::QT_Matlab(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	// 手动连接 clicked 信号与槽
	connect(ui.pushButton, &QPushButton::clicked,this, &QT_Matlab::on_pushButton_clicked);

	// 1. 初始化 MATLAB 运行时(MCR)
	if (!mclInitializeApplication(NULL, 0))
	{
		std::cerr << "Failed to initialize MCR" << std::endl;
	}
	else
	{
		std::cout << "Success to initialize MCR" << std::endl;
	}


	// 2. 初始化你自己导出的 MATLAB 库
	if (!funcInitialize()) { 
		std::cerr << "Failed to initialize MATLAB library" << std::endl;
	}
	else
	{
		std::cout << "Success to initialize MATLAB library" << std::endl;
	}
}

QT_Matlab::~QT_Matlab()
{
	// 在析构 / 退出时清理
	funcTerminate();
	mclTerminateApplication();
}

void QT_Matlab::on_pushButton_clicked()
{
	mwArray aa(1, 1, mxDOUBLE_CLASS, mxREAL);
	mwArray bb(1, 1, mxDOUBLE_CLASS, mxREAL);
	mwArray cc(1, 1, mxDOUBLE_CLASS, mxREAL);

	double a[1] = { 3.0 };
	double b[1] = { 5.0 };
	double c[1];

	aa.SetData(a, 1);
	bb.SetData(b, 1);
	myfunc(1, cc, aa, bb);   //目标函数
	cc.GetData(c, 1);
	ui.label->setText(QString::number(c[0]));
	qDebug() << QString::number(c[0]);
}

测试结果:

参考

QT/VS -- 调用matlab的dll文件

相关推荐
小小龙学IT10 小时前
Qt 元对象系统(Meta-Object System)深度解析:从 MOC 到反射式编程
数据库·qt
chhttty11 小时前
Design Verifier检查:整型数溢出检查与修复
matlab·simulink
小王C语言12 小时前
QT 基础:QT SDK 下载、配置、新建项目、项目代码解释
开发语言·qt
吃好睡好便好15 小时前
判断函数的使用
学习·算法·matlab·生活·判断函数
张人玉16 小时前
基于 Python + PyQt5 的水果目标检测与分割可视化系统——水果深度学习识别可视化大屏
python·深度学习·qt·目标检测·sqlite·echarts
hu92451955916 小时前
Matlab保护源代码—P文件和exe文件详细解析
开发语言·matlab
史上最甜的躯16 小时前
控制系统——基础、导论;以直流电机控制系统为例详解微分方程模型、拉普拉斯变换、传递函数模型的理论、推导及仿真
matlab·simulink·传递函数·控制系统·拉普拉斯·电机模型
程与留1 天前
12_常用控件速查(下):QSpinBox、QSlider、QProgressBar、QCheckBox
c++·qt
lingchen19062 天前
用MATLAB r2010b和r2016b求解微分方程组
开发语言·算法·matlab
可编程芯片开发2 天前
基于李雅普诺夫算法的四旋翼无人机姿态跟踪控制系统simulink建模与仿真
matlab·无人机·制造·四旋翼无人机·李雅普诺夫·姿态跟踪控制