matlab C++ (VS Qt)混合编程 / mxArray / QT5中文乱码

时间:2022-09-24 15:06:36

一、混合编程环境搭建---依据我的情况,分成了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中文乱码的更多相关文章

  1. matlab和C&sol;C&plus;&plus;混合编程--Mex

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

  2. matlab和C&sol;C&plus;&plus;混合编程--Mex (六)参数传递

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

  3. matlab和C&sol;C&plus;&plus;混合编程--Mex (转载)

    matlab和C/C++混合编程--Mex 最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续 ...

  4. 【5&period;1送礼】国内第一部Matlab和C&num;&period;Net混合编程视频教程【免费】

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 上一次写博客很久了 ...

  5. matlab和C&sol;C&plus;&plus;混合编程--调用opencv

    最近的我们已经将整个项目搭起来了,项目比较复杂.由于我们做的是检索系统,所以我们用asp.net(c#)做了网页,但是算法的实现是在matlab下,所以我们不得不用matlab生成动态链接库dll,然 ...

  6. MATLAB与C&sol;C&plus;&plus;混合编程的一些总结

    [转载请注明出处]http://www.cnblogs.com/mashiqi 先上总结: 由于C/C++语言的函数输入输出参数的特点,可以将多个参数方便地传入一个函数中,但却不能方便地返回多个参数. ...

  7. Matlab 2013a 和 VS2010 混合编程

    最近由于项目需求,某项目的算法是基于MATLAB完成的,在短时间内需要去调用算法功能.因此,基于MATLAB生成DLL, C 调用的方式完成. 环境:MATLAB 2013a + VS2010 + w ...

  8. matlab &plus; c&sol;c&plus;&plus; opencv 混合编程

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...

  9. Matlab和C语言混合编程,包含目录的设定

    如果.c文件不依赖于任何第三方库,那么mex编译很简单,只需要在matlab的命令行输入 mex test.c 即可. 但是如果这个c文件使用了第三方库文件,如opencv.gsl等等,那么就需要更改 ...

随机推荐

  1. JS 阶段练习~ 仿flash的图片轮换效果

    结合了所学的简单运动框架~  做这样一个综合小实例~~ -------------------------主要问题: 1.getByClassName  IE低版的兼容性 2.DOM不够严谨 … 各种 ...

  2. Python学习笔记 for windows 二

    函数 abs(-20)                                        //结果为:20,绝对值函数 def 函数名称([参数1,参数2,参数3]): 执行语句 retu ...

  3. SpringMVC问题- MultipartConfig 配置问题以及解决方式

    http://www.cnblogs.com/weilu2/p/springmvc_fileupload_with_servlet_3_0.html

  4. I&period;MX6 Android U-blox miniPCI 4G porting

    /************************************************************************** * I.MX6 Android U-blox m ...

  5. 使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 &comma; 把下划线后面的第一个字母变成大写

    最近项目使用symfony框架,这个框架对数据库的操作在这个团队里使用的是ORM进行操作,说实话使用ORM的开发效率和运行效率不一定高多少,到是它的实体命名和现有数据库字段的命名不太一样,ORM实体属 ...

  6. js的兼容技巧

    javascript原生代码中经常会遇到各式各样浏览器不兼容的问题,浏览器真是倔强,解决浏览器的兼容是前端猿们的一大难题 为了避免在工作中遇到这些简单的问题.节约开发时间,在这里总结一些常用的浏览器兼 ...

  7. gridview列绑定HyperLink

    <asp:HyperLink ID="HyperLink1" Target="_blank" runat="server" Navig ...

  8. jquery通过ajax向后台发送(checkbox)数组,并在后台接收,(发送的数据是checkedbox)

    版权声明:本文为博主原创文章,未经博主允许不得转载. $(document).ready(function(){ var flag = 1; $("#delBtn").click( ...

  9. 38&period; leetcode 405&period; Convert a Number to Hexadecimal

    405. Convert a Number to Hexadecimal Given an integer, write an algorithm to convert it to hexadecim ...

  10. Java父类对象调用子类实体:方法重写与动态调用

    众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例 ...