基础知识(二)matlab与c++混合编程之经验笔记
来源:互联网 发布:数据库工程师 历年真题 编辑:程序博客网 时间:2024/05/21 10:14
开发环境:win7 64位+vs2010+matlab
学习matlab与c++混合编程的路上有时候会遇到莫名其妙的错误,因此做一下记录:
1、由于系统是64位,装的matlab的链接库也是64位,如果使用win32控制台是32位,需要配置管理器-》配置为X64位
2、在c++中调用mwarray类,若未初始化,会出现直接运行没问题,然而调试的时候,出现内存异常,因此需要在调用mwarray前调用初始化函数mclInitializeApplication、及动态链接库的初始化函数。
3、matlab函数最好把函数返回的结果数据转置,因为matlab是根据列存储的,记住只是存储的时候有区别,但在matlab显示行列的时候并没有变,直接用mwarray的getdata()获取数据时,顺序会出错。
4、如果在matlab函数中有形参未被引用,可能会引起奔溃,例如 :
错误形式:
function [ output_args ] = test( input_args )
end
由于该代码中output_args 未被调用 在c++中编译后,会出现函数没有返回参数的错误,最终引起程序崩溃
正确应该为:
function [ output_args ] = test( input_args )
output_args=input_args;
end
5.返回参数问题:返回的参数直接声明对象为mwArray Y;而无需定义矩阵的宽高,但是切记需要被引用
6、在控制台应用程序中,如果matlab中有绘制图片等绘制函数,则程序运行后,不会跳出matlab绘制窗口;然而使用mfc程序调用,可以 跳出matlab的figure等窗口
7、不同的电脑上版本matlab不一致的时候,matlab需要重新生成链接库,否者估计编译完成后,运行的时候出现,找不到某个动态链接库的情况
8、调用前需要初始化模块,调用结束后要关闭matlab模块,共需要调用4句函数假设链接库名为:plotsintest
//调用前
if( ! mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
exit(1);
}
if (! plotsintestInitialize() )
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
//matlab数据处理函数
processfunction();
//调用后
//两句要么不要调用,不调用可实现matlab模块与mfc程序窗口共存的功能,要么一起调用,调用将销毁matlab的相关窗口,或数据
plotsintestTerminate();//关闭函数 如果不关闭,matlab的绘制窗口不会被销毁
mclTerminateApplication();//关闭matlab函数
9、建议在mfc程序构造函数中调用mclInitializeApplication、plotsintestInitialize、析构函数中调用plotsintestTerminate、mclTerminateApplication,由于以上两个初始化函数的初始化时间很长,所以建议这么调用在程序启动的时候完成初始化,然后在进行程序中多次调用matlab函数。
10、matlab函数中不允许调用clear()函数,否则c++调用的时候回引起程序崩溃
2016-6-30更新
开发环境:win10 64位+vs2013+matlab64位
1、matlab 2013不支持vs2013的编译,所以需要安装matlab 2015
2、安装完后,输入mex -setup :
那么表示已经完成了,不需要安装。
3、第二部mbuild命令:
直接不管这个错误了,对后续没影响
4、如果下载到的matlab是64位的,那么vs创建的程序也应该是x64平台编译。另外OpenCV也需要改成64位,还有opencv的dll要指向目录64位(系统环境变量需要修改,否则会出现莫名奇妙的错误)。
本文地址:http://blog.csdn.net/hjimce/article/details/45167679 作者:hjimce 联系qq:1393852684
更多资源请关注我的博客:http://blog.csdn.net/hjimce 原创文章,转载请保留本行作者信息
- 基础知识(二)matlab与c++混合编程之经验笔记
- 基础知识(二)matlab与c++混合编程之经验笔记
- Matlab与VC混合编程之二
- matlab与c(c++)混合编程
- matlab与C混合编程
- matlab与c混合编程
- matlab与C混合编程
- MATLAB与C混合编程
- matlab与c混合编程
- VC与Matlab混合编程之调用动态链接库dll(C++)——<二>
- 基础知识(一)matlab与c++混合编程之环境搭建
- 基础知识(一)matlab与c++混合编程之环境搭建
- c与matlab混合编程之dll调用
- matlab与C语言混合编程之openmp多线程
- matlab与C++/C 混合编程
- Visual Studio 2008学习过程(之二)与MATLAB混合编程
- mex 混合编程 matlab调用c/c++(含lib文件)经验汇总
- MATLAB与.NET混合编程实例(C#)
- 使用Picasso加载图片的内存优化实践
- poj 3414 Pots (BFS + 记录路径)
- hdu 5932: Backpack on Tree 贪心+dp
- Fragment 中获取父Activity控件
- Linux --- vim命令
- 基础知识(二)matlab与c++混合编程之经验笔记
- iOS App 崩溃报告符号化,.ips崩溃报告文件分析
- 8天学通MongoDB——第六天 分片技术
- 让你的微信不再被人撤回消息
- Socket编程 Select详解
- 维金云钱包让用户快速拥有灵活轻便的收付款能力
- URL地址相对路径转绝对路径
- [从头学绘画] 第16节 六十四式八卦掌 (33-40)
- Struts2拦截器