matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码
一、混合编程环境搭建---依据我的情况,分成了4个部分:
1:破解matlab,因为matlab破解不完全,编译器不能使用,会出错。(参考https://blog.csdn.net/a125930123/article/details/53508097)
三个文件相应覆盖,但license文件在安装路径里面没有找到,就在help里面找到active。。然后导入lisence文件。
2、打包.m函数,形成.h .lib .dll文件(参考https://blog.csdn.net/r1254/article/details/52587970)
进行完上面的激活步骤后,完全按照参考博客即可
--------我的matlab函数中还调用了其他matlab函数,于是我在打包添加函数文件时,将两个函数文件都加进去了。
3、配置环境:VS环境配置(参考:https://blog.csdn.net/r1254/article/details/52587970)
项目属性中VC++目录:include添加matlab安装目录下extern\include
库目录添加matlab安装目录下extern\lib\win32\microsoft (32位系统)
连接器 -》输入:libeng.lib;libmat.lib;libmex.lib;libmx.lib;mclmcrrt.lib;mclmcr.lib +自己函数生成的.lib文件
----------才发现上面两个博客是一个。。
4、运行,
运行的时候将三个文件放在工程中放头文件和源文件的文件夹里面,dll文件放在debug文件中。
二、执行过程----中间涉及到了mxArray,qt5中文乱码
针对这一部分,没有做过多的研究,只是将自己的程序调通了。
调用的流程:
1、先调用初始化函数
初始化函数建议放在类的构造函数里,terminate函数放在析构函数里。【我在使用这块的时候,如果在调用初始化函数之前该类做了其他事情,那么初始化就会出现错误,于是将初始化放在了最前面,结束函数放在了最后】----下面代码里没写,直接将函数写在构造和析构函数中就行
2、创建mxArray变量用于传参和接收返回的数据
3、调用matlab函数,我调用的是前面加mlx的函数【生成了哪些函数,在那个.h文件里都能看到】
4、调用terminate函数【在析构函数里调用】。完成
下面是代码:
函数传入的参数是一个字符串:
QString dataFilePath;//之前在前面赋值了
string inStr = qstr2str(dataFilePath);//qstr2str是一个函数
const char* in = inStr.c_str();
mxArray *im = mxArrayCreatString(in);//传参
mxArray *out = mxArrayCreateDoubleMatrix(row,3,mxREAL);//row是文件行数,返回数据的行数也是这些
//调用matlab函数
mlxCalculateTrajectory(1,&out,1,&im);
//因为路径里面存在中文字符,在Qt里面不可避免地出现了乱码,网上的方法都是针对Qt4之前的,而且有滥用之嫌,后来就去掉了。下面是参考博客内容:
//https://blog.csdn.net/baidu_34045013/article/details/58603221
string qstr2str(const QString qstr)
{
QByteArray cdata = qstr.toLocal8bit();
return string(cdata);
}
因为程序中获取matlab函数输入数据是动态存在数组里的,而网上常用的方法是memcpy,但是这个函数是将一块连续的内存的数据复制到另外一块连续的内存中。所以针对我的情况,网上有提示说,需要通过循环将数据一个一个赋值。接收数据是一个n*3的矩阵,n的大小未知,采用循环的方式逐个赋值。赋值过程中,matlab是按列进行存储,即先存第一列,再存第二列。。。。。
for(int i = ;i < row;i++)
{
for(int j = ; j < ;j++)
{
memcpy(&positionList[i][j],mxGetPr(out)+j*row+i,sizeof(double));
}
}
至此就完成了整个过程
matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码的更多相关文章
- matlab和C/C++混合编程--Mex
最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...
- matlab和C/C++混合编程--Mex (六)参数传递
最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...
- matlab和C/C++混合编程--Mex (转载)
matlab和C/C++混合编程--Mex 最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续 ...
- 【5.1送礼】国内第一部Matlab和C#.Net混合编程视频教程【免费】
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 上一次写博客很久了 ...
- matlab和C/C++混合编程--调用opencv
最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然 ...
- MATLAB与C/C++混合编程的一些总结
[转载请注明出处]http://www.cnblogs.com/mashiqi 先上总结: 由于C/C++语言的函数输入输出参数的特点,可以将多个参数方便地传入一个函数中,但却不能方便地返回多个参数. ...
- Matlab 2013a 和 VS2010 混合编程
最近由于项目需求,某项目的算法是基于MATLAB完成的,在短时间内需要去调用算法功能.因此,基于MATLAB生成DLL, C 调用的方式完成. 环境:MATLAB 2013a + VS2010 + w ...
- matlab + c/c++ opencv 混合编程
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- Matlab和C语言混合编程,包含目录的设定
如果.c文件不依赖于任何第三方库,那么mex编译很简单,只需要在matlab的命令行输入 mex test.c 即可. 但是如果这个c文件使用了第三方库文件,如opencv.gsl等等,那么就需要更改 ...
随机推荐
- 不再依赖A*,利用C++编写全新寻路算法
一,说在前面的话 大概在半年前,看见一到信息竞赛题:在任意方格阵中设置障碍物,确定起始点后,求这两点之间路径.当时觉得蛮有意思的,但是没有时间去做,今天花了两个小时来实现它.据说有一个更高级的寻路算法 ...
- python学习笔记(十)完善数据库操作
1.cur = coon.cursor(cursor=pymysql.cursors.DictCursor)的用法 建立游标,指定cursor类型返回的是字典,如果不指定类型,返回的是元组类型数据 i ...
- 揭秘DOM中data和nodeValue属性同步改变那些事
问题引发:最近在整理DOM系列的一些知识点,发现在DOM的某些接口API中,存在一些我想不通的现象.就随便举个例子吧:DOM文档模型中的文本节点,可以通过nodeValue或data属性访问文本节点的 ...
- Cookie , Session ,Session 劫持简单总结
cookie 机制: Cookies 是 服务器 在 本地机器 上存储的 小段文本,并伴随着 每一个请求,发送到 同一台 服务器. 网络服务器 用 HTTP头 向客户端发送 Cookies.在客户端, ...
- WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法
由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作 ...
- Mysql Having的用法:对group by之后的分组加限制条件(复制)
在使用聚合函数之前,我们可以通过where对查询加限制条件,那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢?答案是having. HAVING子句可以让我们筛选成组后的各组数 ...
- EntityFramework 6 开篇
本系列文章主要来讲解理解以及怎样使用EntityFramework,写这个系列主要是因为部门里面准备来使用EF,为了让大家一起来学习,我每天发布1-2篇文章让大家一块参与学习.之前一直写在有道云笔记里 ...
- PL/SQL编程-块编程
(1). 简单分类 |————过程(存储过程) | ...
- ubuntu apt-get 安装 lnmp
最近在 Ubuntu 14.04 LTS 安装 LNMP 一键安装包的时候出现了问题,PHP 5 服务没有启动,只好使用 Ubuntu 官方源进行安装: Nginx (读音 “engine x”)免费 ...
- 写入Csv
//定义文件输出流 FILE *f; f = fopen("a.csv" , "wb"); fprintf(f,"aaa,23,sdf\n" ...