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

matlab生成dll库

1、matlab示例代码

function untitled4(x)
    z = peaks(x);
    figure
    surf(z)
end

2、matlab环境配置

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

!mcc

若正常,出现以下结果:

【Qt-17】Qt调用matlab生成的dll库_第1张图片

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

mbuild -setup

 【Qt-17】Qt调用matlab生成的dll库_第2张图片

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

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

mex -setup

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

3、打包dll

【Qt-17】Qt调用matlab生成的dll库_第3张图片

Qt调用dll

1、拷贝

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

【Qt-17】Qt调用matlab生成的dll库_第4张图片

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

【Qt-17】Qt调用matlab生成的dll库_第5张图片

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

 【Qt-17】Qt调用matlab生成的dll库_第6张图片

4、添加matlab头文件

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

5、QT调用

首先进行初始化,

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

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

#include "untitled4.h"

...
untitled4(mwArray(25));

完整示例代码:

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "untitled4.h"
#include 

#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    if(untitled4Initialize())
    {
		qDebug() << "初始化成功!";
    }
	else
	{
		qDebug() << "初始化失败!";
	}
	
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
	untitled4(mwArray(25));
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    

private:
    Ui::MainWindow *ui;

public slots:
	void on_pushButton_clicked();

};
#endif // MAINWINDOW_H

运行结果:

【Qt-17】Qt调用matlab生成的dll库_第7张图片

问题解决:

【Qt-17】Qt调用matlab生成的dll库_第8张图片

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

【Qt-17】Qt调用matlab生成的dll库_第9张图片

【Qt-17】Qt调用matlab生成的dll库_第10张图片

你可能感兴趣的:(qt,matlab,开发语言)