c++引用matlab类,matlab调用C++函数浅谈(一)

由于在下才疏学浅,在网上看各高手指南时亦觉云里雾里,遂决定一切说明从最基础说起,一是方便自己(记性奇差),二是方便似我的小白。以下部分是我从各网站论坛等摘抄、重组、改写过的,以求更加详实明朗,由于参考较多,便不一

一列举,相信在baidu前三页各位能够找到我所引用的内容。在这里,向前辈们致敬!

闲话少序。

首先,说最简单环境,我的是matlab2012a,vs2010。

其次,创建C++函数:若想将matlab中部分函数C++化,先在vs中新建一个cpp文件(注意,不是新建项目,否则#include

不对)。这个文件(我们管它叫mex文件)的名字就是将来在matlab中调用函数的名字,所以别随便起。这个文件是有一定格式的:

*一个C/C++的MEX源程序通常包括4个组成部分,其中前3个是必须包含的内容,第4个则根据所实现的功能灵活选用

*(1) #include “mex.h”;

*(2)MEX文件的入口函数mexFunction, MEX文件导出名必须为mexFunction函数;

*(3)mxArray;

*(4)API函数

这里,举个最简单的样例:

#include

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray

*prhs[])

{ mexPrintf("hello,world!/n");

}

以上,就是一个最简单的mex文件。关于mexFunction,可以认定是一个接口函数,有一定的规则:

nlhs:输出参数数目

plhs:指向输出参数的指针数组

nrhs:输入参数数目

prhs: 指向输入参数的指针数组

同样举个例子:

在matlab Command

Window(命令窗口)中调用时(当然是编译后,下一步讲),如:[a,b]=test(c,d,e),*prhs[0]=c

*prhs[1]=d

*prhs[2]=e,当函数返回时,将会把你放在plhs[0],plhs[1]里的地址赋给a和b,达到返回数据的目的。比如mex文件helloworld:

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray

*prhs[])

{

int i;

i=mxGetScalar(prhs[0]);

if(i==1)

mexPrintf("hello,world!\n");

else

mexPrintf("大家好!/n");

}

当在matlab写:helloworld(1)时,打印出“hello,world”;否则打印出“大家好!”

接着,在matlab中编译:首先在命令窗口(格式稍加改动,不影响参照):

>>mex -setup 有:

Welcome to mex -setup. This utility will help you set up

a default compiler. For a list of supported compilers, see

http://www.mathworks.com/support/compilers/R2012a/win32.html

Please choose your compiler for building MEX-files:

Would you like mex to locate installed compilers [y]/n?

输入:y 有:

Select a compiler:

[1] Lcc-win32 C 2.4.1 in E:\MATLAB~1\sys\lcc

[2] Microsoft Visual C++ 2010 in D:\vs2010

[0] None

Compiler:

输入:2 有:

Please verify your choices:

Compiler: Microsoft Visual C++ 2010

Location: D:\vs2010

Are these correct [y]/n?

输入:y 就行了。然后会出一堆别的东西,不用理它。

然后,敲下:

>>cd

D:\matlab试验田\matlab调C++\hello2 其中,cd后的一串是刚才mex文件所在的文件夹,即路径。

接着,敲下:

>>mex helloworld2.cpp

其中,mex后面就是mex文件的文件名,也就是C++函数,之后会生成helloworld2.mexw32(64位的会生成

.mexw64)文件,在matlab当前文件夹(Current

Folder中会有显示,相应的,在mex文件所在文件夹中也有体现)。

最后,在matlab中调用C++函数:像matlab中调用普通函数即可。比如第二步中:

>>[a,b]=test(c,d,e)

(test就是C++函数,用就行了),比如:

>>helloworld2 就会直接显示:hello

world!

至此,最简单的matlab调用C++函数告一段落。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值