一、混合编程环境搭建---依据我的情况,分成了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/C++混合编程--Mex

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

  2. matlab和C/C++混合编程--Mex (六)参数传递

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

  3. matlab和C/C++混合编程--Mex (转载)

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

  4. 【5.1送礼】国内第一部Matlab和C#.Net混合编程视频教程【免费】

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

  5. matlab和C/C++混合编程--调用opencv

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

  6. MATLAB与C/C++混合编程的一些总结

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

  7. Matlab 2013a 和 VS2010 混合编程

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

  8. matlab + c/c++ opencv 混合编程

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

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

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

随机推荐

  1. 如何停止requestAnimationFrame方法启动的动画

    HTML5/CSS3时代,我们要在web里做动画选择其实已经很多了:(1) 你可以用CSS3的animattion+keyframes;(2) 你也可以用css3的transition; (3) 你还 ...

  2. LNMP环境修改上传文件大小

    LNMP环境修改上传文件大小限制     如果网页上传文件大小大于nginx或php设定的值,就会造成无法上传,显示IO error错误. 如何解决这个问题呢?我们需要更改两个配置: 1.  ngin ...

  3. SDUT1574:组合数的计算

    题目描述 给定n组整数(a,b),计算组合数C(a,b)的值.如C(3,1)=3,C(4,2)=6. 输入 第一行为一个整数n,表示有多少组测试数据.(n <= 100000) 第2-n+1行, ...

  4. Java 利用监听器来实现记录用户访问网站次数

    假如有这么一个需求,要记录所有用户访问某一页面的次数. 最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增.但这样有一个问题,就是Tomcat或者其他服务器重启的话 ...

  5. c++中字符串反转的3种方法

    第一种:使用algorithm中的reverse函数 #include <iostream> #include <string> #include <algorithm& ...

  6. for…else和while…else

    当while语句配备else子句时,如果while子句内嵌的循环体在整个循环过程中没有执行break语句(循环体中没有break语句,或者循环体中有break语句但是始终未执行),那么循环过程结束后, ...

  7. PHP的pm、pm.max_requests、memory_limit

    1.php-fpm.conf中的pm pm是来控制php-fpm的工作进程数到底是一次性产生固定不变(static)还是在运行过程中随着需要动态变化(dynamic).众所周知,工作 进程数与服务器性 ...

  8. 深拷贝与浅拷贝js,方法

    在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生. 参考 ...

  9. 论文笔记:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks

    2014 ICLR 纽约大学 LeCun团队 Pierre Sermanet, David Eigen, Xiang Zhang, Michael Mathieu, Rob Fergus, Yann ...

  10. 此博客可能不再更新,往后博文将发布在 GitHub 中

    在 GitHub 上, 可以建立不同的仓库,显示分类可以更明确: 有不同分支,可以打很多次草稿: 用 markdown 语法来书写比较舒服(博客园也可以设置): 最主要的是 GitHub 装逼呀!!! ...