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文件

相关推荐
AoDeLuo7 小时前
SOEM2.0编译与Qt调用
qt·机器视觉
大树学长8 小时前
【QT开发】Windows 10 + Qt 5.15.2 手动编译安装 Qt OPC UA 模块完整记录
开发语言·windows·qt
Evand J8 小时前
【课题推荐】强跟踪UKF算法,三维非线性状态量和观测量,附MATLAB代码测试结果
开发语言·算法·matlab
小短腿的代码世界10 小时前
Qt低级网络编程与零拷贝技术在高频交易中的应用:从QTcpSocket到共享内存的全链路优化
开发语言·网络·qt
qq_4017004111 小时前
Qt 自定义无边框窗口:标题栏、拖拽移动与缩放
开发语言·qt
茗创科技11 小时前
Nat Hum Behav | 特征选择会导致基于脑影像的机器学习生物标志物产生迥异的神经生物学解释
python·深度学习·机器学习·matlab·脑网络
Evand J12 小时前
【课题推荐】三模型IMM交互式多模型滤波算法,匀速/左转/右转目标跟踪,附MATLAB代码测试结果
算法·matlab·目标跟踪·无人机·imm·多模型
xiaoye-duck13 小时前
Qt 信号与槽深度解析:connect 用法、自定义信号槽与 Lambda 实战
开发语言·qt
郝学胜-神的一滴15 小时前
Qt 高级开发 008: 使用QSetting记住上次打开路径
开发语言·c++·qt·开源软件
aini_lovee15 小时前
MATLAB 基于多层编码遗传算法的车间调度优化
开发语言·matlab