vs2010和Matlab R2012a 混合编程
来源:互联网 发布:vb如何删除非打印字符 编辑:程序博客网 时间:2024/05/21 09:54
2.书写m文件
示例如下:
function [ c ] = MyAdd( a,b )
%UNTITLED Summary of this function goes here
%
c=a+b;
end
保存为MyAdd.m
3.创建动态链接库
Matlab中输入:mcc -W cpplib:libMyAdd -T link:lib MyAdd -d [生成文件路径]
其中,mcc是Matlab提供的编译命令,对于这一点,Matlab的帮助说明如下:
-W
运行完之后,你的目录下面,将会出现以下一些文件:
libMyAdd.cpp
libMyAdd.exp
libMyAdd.dll
libMyAdd.exports
libMyAdd.h
libMyAdd.lib
mccExcludedFiles.log
readme.txt
具体每一个文件的意思,请查帮助,这里只说其中很有用的几个:
libMyAdd.dll是编译好的动态库,MyAdd这个函数封装在里面,libMyAdd.h是对应的头文件,在C里面调用这个函数的时候,需要include这个头文件在这个头文件的最后,你可以看到下面的内容:
extern
这就是MyAdd的C函数的声明。nargout表示输出变量的个数,a,b,c就是对应了m函数的几个变量。
注意,a,b,c三个变量的类型是mwArray,这是Matlab提供的一个特殊的变量类型(在7.0的版本,编译之后,变量类型是mxArray)。mwArray是一个类,具体可以查帮助。
4.系统环境配置
Computer
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
Computer
...\MATLAB\runtime\win32;
...\MATLAB\bin;
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
5.vs2010环境配置
a.创建一个console
b.
①Property
...\MATLAB\extern\include\
②Property
...\MATLAB\extern\lib\win32\microsoft
③Property
...\MATLAB\extern\include\
④Property
...\MATLAB\extern\lib\win32\microsoft
⑤Property
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libMyAdd.lib
6.vs2010下完成程序
把刚才生成的lib*.h
其中testmat3.cpp程序如下:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
using namespace std;
int main()
{
double a = 6;
double b = 9;
double c;
// initialize lib,这里必须做初始化!
if( !libMyAddInitialize())
{
std::cout <<"Could not initialize libMyAdd!" << std::endl;
return -1;
}
// 为变量分配内存空间,可以查帮助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
// using my add,掉我自己写的函数
MyAdd(1, mwC, mwA, mwB);
// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
c = mwC.Get(1, 1);
std::cout<<"c is \n" <<c<<std::endl;
// 后面是一些终止调用的程序
// terminate the lib
libMyAddTerminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
7. 程序运行结果:
出现此结果基本上就说明混合编程成功了。
注:如果m文件中有画图方面的函数,则前边一定要有延时函数,或者在c程序中m函数调用后加上getchar(),否则当lib和MCR被terminated后图像会被关闭----即程序运行后会出现图像“一闪而过”的效果!
8. 参考资料:
(1)<<MATLAB2012a和VS2010混合编程的实现(Win7+32bit)>> by
(2)<<Matlab 与c++混合编程>> --------matlab r2011a and vs2010
以上过程其实还大可简化。如有问题,欢迎交流!
- vs2010和Matlab R2012a 混合编程
- Matlab R2012a和vs 2010混合编程
- MATLAB R2012a与vs2010混合编程 error LNK2019
- MATLAB R2012a与vs2010混合编程 error LNK2019
- MATLAB R2012a与vs2010混合编程 error LNK2019
- vs2010和Matlab R2012b 混合编程
- matlab 2012 vs2010混合编程
- matlab 2012 vs2010混合编程
- MATLAB和VS2010的混合编程需要注意的问题
- C++/Matlab混合编程(vs2010和matlabR2014a)
- vs2010 matlab混合编程调用matlab引擎
- matlab 2012b与VS2010混合编程
- VC++和Matlab混合编程
- Matlab和C混合编程
- c和matlab混合编程
- matlab和C++混合编程
- Java和matlab混合编程
- c#和MATLAB混合编程
- 高数第三章 微分中值定理与导数的应用
- 男生的眼泪、女生永远不懂纯属伤感
- 编程能力的四种境界
- poj 2349解题报告
- Lucene 4.0 [FS/SmartChinese...]
- vs2010和Matlab R2012a 混合编程
- 了解什么是IFRAME ASP.NET
- Oracle 10g RAC中的DRM
- error C2440 “static_cast” 无法从“void (__thiscall CPppView )(void)”转换为“LRESULT (__thisca
- 怀念过去的伤感爱情日志:某一天你是否记得我
- magento 邮件原理系列教程3
- 第8周任务3:求两点间的距离
- android如何让service不被杀死
- 求两点之间的距离