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等等,那么就需要更改 ...
随机推荐
- ibatis打印sql
###显示SQL语句部分log4j.logger.com.ibatis=DEBUGlog4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUGl ...
- POJ1664:放苹果(线性dp)
题目: http://poj.org/problem?id=1664 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1 ...
- 批处理delims分割时遇到的问题。。
今天写了个将文件每行按逗号分割并取第六行的批处理.但是结果不对.看图一目了然. for 循环的/f 后面的参数是这样的 然后文件的内容是这样的 亮点是倒数第二行..其实6才是第六列的值.其他行第六列都 ...
- CCF 工资计算
思路: 因为T<=10000,所以税前极限金额肯定不超过1000000(设个比较大的数字就行),然后逐一计算即可. #include<cstdio> int main() { int ...
- 84. Largest Rectangle in Histogram(直方图最大面积 hard)
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- [转]Algolia的分布式搜索网络架构
转自:http://www.csdn.net/article/2015-03-11/2824176-the-architecture-of-algolias-distributed-search-ne ...
- C++ char float int string 之间的转换
string str = "123"; string 转 int int i = atoi( str.c_str() ); string 转 float float f = ato ...
- TOSCA自动化测试工具--建立测试用例
1.测试链接 demowebshop.tricentis.com 测试login 2.检查元素 3.Modules模块,建立自己的文件夹,右键Scan Application , Desktop 4. ...
- CSS清除浮动大全的8种方法
清除浮动是每一个 web前台设计师必须掌握的机能.css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的 ...
- PHP引入框架包
引入包 之后 在写代码的时候会有提示. 流程: 项目名称右击->包含目录->TAB页签选择库-> add external source folder 找到需要的包.