使用c++调用matlab


使用的环境是vs2008+matlab2011,其它的版本应该差不多。

使用matlab写好一个函数后,在c++中调用它,可以极大的提高开发速度。

由于别的文章没有介绍如何输入输出,我在这里再写一遍。


1.配置:

文章http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/中,已经详细介绍了如何配置matlab,不再赘述。

2.编译:

上面的文章使用命令编译,编译出的是c文件,如果你需要c++的版本,可以使用

http://stackoverflow.com/questions/6429243/how-to-call-matlab-functions-from-c

中介绍的图形界面编译工具。(File-> new -> Deployment Project and then choose C++ shared Library)

编译好了只好,在你使用图形编译工具新建的工程目录中,distrib文件夹下应该有*.h, *.lib, *.dll文件。

3.使用

例如我写了matlab函数

function [ c ] = sum22( a,b )
    c = a + b;
end

用来求解矩阵的和,编译之后产生sum22.h,sum22.lib,sum22.dll三个文件,把sum22.h文件放到你的工程的源文件夹下,把sum22.lib,sum22.dll放到你的项目目录下。

在c++代码中加入:

#include "sum22.h"


#pragma comment( lib, "libeng.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment( lib, "mclcommain.lib" )

#pragma comment( lib, "sum22.lib" )

使用的方法:

mclInitializeApplication(NULL,0);
sum22Initialize(); 

double numbrIn1[] = {1,2,3,4};//输入变量1,为2*2矩阵,所以长度为4
double numbrIn2[] = {5,6,7,8};

double numbrOut[4];//输出变量
mwArray array_in1(2, 2, mxDOUBLE_CLASS, mxREAL);//建立 2 * 2 浮点矩阵
mwArray array_in2(2, 2, mxDOUBLE_CLASS, mxREAL);
array_in1.SetData(numbrIn1,4);
array_in2.SetData(numbrIn2,4);
mwArray array_out;
sum22(1, array_out, array_in1, array_in2);//1代表一个输出(不是很确定),然后是输出参数,然后是两个输入参数
array_out.GetData(numbrOut, 4);
//这时候就可以看到numbrOut的值发生了变化
mclTerminateApplication();
sum22Terminate();


在对QT、c++的混合编程时,发现wincon.h报出一堆编译错误,主要是语法错误,我把include 的文件等等放到最开头,问题解决。

mclInitializeApplication这样的函数要放到构造和析构函数中,程序只能调用一次,而不是每次都调用,否则会运行时错误。


备注:

这篇文章参考了

http://stackoverflow.com/questions/6429243/how-to-call-matlab-functions-from-c

http://blog.163.com/rongting_chen/blog/static/164906844201252354518462/

的内容。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值