vc与matlab混合编程版本问题解决方法(接着上一篇)
来源:互联网 发布:4g网络必须用4g手机吗 编辑:程序博客网 时间:2024/06/04 20:07
vc与matlab混合编程版本问题解决方法
(首先声明本人没有经常使用matlab,不是很熟悉matlab的使用情况,但以下是这三天折腾完发现的问题,希望能对大家有所帮助。)
由于matlab的版本比较多,造成了混合编程时会碰到很多问题。查找了很多资料发现matlab的改变主要分界线是7.0版本。Matlab7.0以前的编程库文件、头文件的定义与之后的版本有点区别。通过查找,网上的应用实例有不同的说明,挺乱的。比较典型的有两种:一种是使用mcc -W lib:libmcctest02 -T link:lib mcctest02.m命令生成libmcctest02.hlibmcctest02.liblibmcctest02.dll文件;另一种是使用deploytool方法生成libmcctest02.hlibmcctest01.liblibmcctest02.dll文件。这中间就存在一些问题,以下说明这两中生成dll文件给编程带来的麻烦。
1. 使用mcc -W lib:libmcctest02 -T link:lib mcctest02.m生成的dll文件是基于C语言的,如果使用VC编程时将会存在问题,比如mwarray类就不能调用,一般网上说明是需要天剑matlab.hpp文件,但是matlab7.0版本以后就没有这个文件了,cpp的class已经包含在头文件在#include"mclcppclass.h"中了,需要在VC文件中加入该头文件。但是在调用M文件定义函数时,需要调用mlf+函数名,如mlfmcctest02();生成的头文件libmcctest02.h中也能看到该函数的定义。
extern LIB_libmcctest02_C_API bool MW_CALL_CONVmlfMcctest02(mxArray* wndname, mxArray* showwnd);
2. deploytool方法生成libmcctest02.hlibmcctest01.liblibmcctest02.dll文件才是VC编程员最想要的。生成方法在网上很多,这里就不一一说明了,只强调一点在建立项目是需要选择C++ Share Library(本人使用matlab2012a)。如下图,其他的步骤就跟网友们说的一样了。
具体类似方法:http://archive.cnblogs.com/a/1941220/
编译生成libmcctest02.hlibmcctest01.liblibmcctest02.dll,现在咱们看libmcctest02.h有什么变化。
extern LIB_libmcctest02_CPP_API void MW_CALL_CONVmcctest02(const mwArray& wndname, const mwArray& showwnd);
调用定义函数时调用mcctest02()就可以了,并且不需要添加#include "mclcppclass.h"文件,因为已经包含在libmcctest02.h文件中了。
3. 下面是在VC中使用时不看头文件libmcctest02.h,造成的时间浪费,希望大家不用犯同样的错误了。在查看资料或者网页时会发现,一般在定义调用mcctest02()参数时都是用mwArray类来定义,但是如果使用mcc -W lib:libmcctest02 -T link:lib mcctest02.m生成库文件的方法,是行不通的,因为mlfMcctest02(mxArray* wndname, mxArray* showwnd);的参数是mxArray类声明的形参,对应不上。这种错误最直接的解决方法是查看matlab的帮助文档。
4. 以上的过程在使用VC6.0与VS2005都验证过,在做混合编程时,应该跟VC的版本没很大的关系。在MFC应用程序中插入Matlab的figure时,有一个问题需要注意,这是VC编译器的应用问题。
VC6.0:HWNDhFig = ::FindWindow(NULL, "Mytest");"Mytest"还可以使用表示该字符串的数组或指针,但是在VS2005中不可以。
VS2005:HWNDhFig = ::FindWindow(NULL, _T("Mytest"));
- vc与matlab混合编程版本问题解决方法(接着上一篇)
- matlab与vc混合编程问题解决
- MATLAB与VC混合编程(1)
- Matlab与VC混合编程
- Matlab与VC混合编程
- vc与matlab混合编程
- Matlab与VC混合编程
- Matlab与VC混合编程
- MATLAB与VC混合编程
- VC++与MATLAB混合编程
- VC与Matlab混合编程
- VC与Matlab混合编程
- VC与Matlab混合编程
- VC++与MATLAB混合编程
- VC与Matlab混合编程
- VC与matlab混合编程
- matlab和VC++混合编程(mex方法)
- vc&matlab混合编程方法简介
- Selenuim RC + Junit 4 +eclipse 配置 自动化测试
- s3c6410硬件RTC(实时时钟)
- selector
- 常见设计模式的解析和实现(C++)之五-Singleton模式
- topcoder SRM500 div1 Level3
- vc与matlab混合编程版本问题解决方法(接着上一篇)
- AutoITx3.DLL全部函数及说明
- 线性表的链式表示与实现
- Struts2一个Action内包含多个请求处理方法的处理(三种方式)
- 堆内存和栈内存详解
- CentOS下安装tar包/rpm包
- 整数大数加法
- Oracle Relink RAC Binary Options 说明
- topcoder SRM div 2 level 1