qt调用MATLAB dll问题,调用mwarray就出现程序异常结束 急急急!!!!!

真是个小菜鸡 2016-11-26 09:26:39
qt版本是5.6.2 ,用的是vs2013 的编译器,MATLAB版本是2016a,可以用vs实现和MATLAB的混合编译。
本是想在qt下实现与MATLAB的混合编程,忽然发现我在qt下用mwarray函数就出现程序异常结束。构建能成功。
下面是我添加的库和目录
INCLUDEPATH += D:\MATLAB\R2016a\extern\include
INCLUDEPATH += D:\MATLAB\R2016a\extern\include\win64

LIBS += -LD:\MATLAB\R2016a\extern\lib\win64\microsoft -llibmx
LIBS += -LD:\MATLAB\R2016a\extern\lib\win64\microsoft -llibmat
LIBS += -LD:\MATLAB\R2016a\extern\lib\win64\microsoft -lmclmcr
LIBS += -LD:\MATLAB\R2016a\extern\lib\win64\microsoft -lmclmcrrt
LIBS += -LD:\MATLAB\R2016a\extern\lib\win64\microsoft -llibeng


qt和MATLAB的环境配置

D:\Qt\Qt5.6.2\5.6\msvc2013_64\bin;
d:\MATLAB\R2016a\runtime\win64;
d:\MATLAB\R2016a\bin;
d:\MATLAB\R2016a\polyspace\bin

程序主代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <engine.h>
#include <cv.h>
#include <highgui.h>
#include <opencv2/highgui/highgui.hpp>
#include <algorithm>
#include <cxcore.h>
#include <opencv2/opencv.hpp>
#include <mclmcr.h>
#include <matrix.h>
#include <mclcppclass.h>
#include <QLibrary>
#include <test.h>
#include <QMessageBox>
#include <QTimer>
#include <QMetaType>
#include <QDebug>
using namespace std;
using namespace cv;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// timer = new QTimer(this);
// connect(timer,SIGNAL(timeout()),this,SLOT(readframe()));
}

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

void MainWindow::on_Btn_open_clicked()
{
mwArray in1(3, 3, mxDOUBLE_CLASS, mxREAL);
}
...全文
1963 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吕景炎 2019-11-06
  • 打赏
  • 举报
回复 1
一楼其实说的很高深。能解决matlab和其他语言得传参问题。只怪当初看不懂,走了很多弯路。
吕景炎 2019-11-06
  • 打赏
  • 举报
回复 2
3楼正解,用depends查看下dll,有个初始化函数。在调用mwarry之前,赵调用初始化函数。
Archibald_Yao 2017-12-05
  • 打赏
  • 举报
回复 1
缺少初始化代码
Althindor 2017-08-28
  • 打赏
  • 举报
回复
我也遇到了同样的问题,请问楼主解决了吗?
赵4老师 2016-11-27
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧