Matlab调用C语言编写MEX文件

方法:
第一步:要先在matlab中安装c程序编译器,步骤如下:
键入命令:mex -setup;
选择c/c++编译器;
选择c/c++编译器版本;
确认。
第二步:键入:mex *.c
举例
//add.c
#include "mex.h"
// 使用MEX文件必须包含的头文件
// 执行具体工作的C函数
double add(double x,double y)
{
    return x + y;
}
// MEX 文件接口函数
void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
    double *a;
    double b,c;
    plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
    a = mxGetPr(plhs[0]);
    b = *(mxGetPr(prhs[0]));
    c = *(mxGetPr(prhs[1]));
    *a = add(b, c);
}
对于函数mexFunction,是没返回值的,它不是通过返回值把结果传回Matlab的,而是通过对参数plhs的赋值。mexFunction的四个参数皆是说明Matlab调用MEX文件时的具体信息,如这样调用函数时:
>> b = 1.1; c = 2.2;
>> a = add(b, c)
mexFunction四个参数的意思为:
nlhs = 1,说明调用语句左手面(lhs-left hand side)有一个变量,即a。
nrhs = 2,说明调用语句右手面(rhs-right hand side)有两个自变量,即b和c。
plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。因为现在左手面只有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。
prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指针数组,即不能改变其指向内容。
因为Matlab最基本的单元为array,无论是什么类型也好,如有double array、 cell array、 struct array……所以a,b,c都是array,b = 1.1便是一个1x1的double array。而在C语言中,Matlab的array使用mxArray类型来表示。所以就不难明白为什么plhs和prhs都是指向mxArray类型的指针数组。
然后就可正常调用了
>> output = add(1.1, 2.2);
实际上mexFunction是没有这么简单的,我们要对用户的输入自变量的个数和类型进行测试,以确保输入正确。如在add函数的例子中,用户输入char array便是一种错误了。
<MATLABroot>\extern\example 目录下有mex文件的举例,如mexFunction.c展现了C-Mex的基本框架,mexcpp.cpp说明了如何在C++语言中使用MEX文件,mex.h文件中有mex常用的库函数介绍。
VC.Net 环境下可编译和调试MEX文件,如下设置,
Tools->VC Include 加入<MATLABroot>\extern\include
Tools->VC library 加入<MATLABroot>\extern\lib\win32\microsoft
创建dll文件后,修改工程属性中的链接器,添加libmex.lib libmx.lib libmat.lib
Debug 的command中加入matlab.exe完整路径,
然后运行,报无符号信息提示,不用管,matlab自动打开,输入cd debug,运行exe文件,开始调试。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值