基础知识(二)matlab与c++混合编程之经验笔记
2015-04-21 10:58
633 查看
开发环境: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++调用的时候回引起程序崩溃
本文地址:/article/7649350.html 作者:hjimce 联系qq:1393852684
更多资源请关注我的博客:http://blog.csdn.net/hjimce
原创文章,转载请保留本行作者信息
相关文章推荐
- 基础知识(二)matlab与c++混合编程之经验笔记
- 基础知识(一)matlab与c++混合编程之环境搭建
- C++ 和 汇编 混合编程幼儿园经验总结**持续更新** 学习笔记贴
- linux网络编程学习笔记之一 -----各种基础知识小结
- C++基础知识学习笔记
- matlab笔记-基础知识
- [改写] matlab转C/C++ 的混合编程 (beta版)
- VC+Matlab混合编程经验总结
- C++学习笔记1--基础知识
- matlab 和c混合编程-------------------基础
- java编程笔记1 java基础知识
- 关于Linux下mysql的C/C++基础编程笔记
- MATLAB与C++混合编程:动态链接库方法实现混合编程及常见错误解决办法
- C/C++学习笔记:基础知识6
- Matlab与C++接口与混合编程讨论小结
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
- Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据
- Linux下使用Vim进行C/C++ 编程基础知识详解
- Matlab 编程基础(二)笔记