先贴代码

#include"mex.h"
#define INPUT_ARG 1
#define OUTPUT_ARG 1void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]);
void testFunction(double *outputArray,double *inputArray);
//函数声明void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{//接口函数:包含参数:输入变量个数nrhs,输出变量个数nlhs,以及各变量的地址//不同于纯粹的C语言,该函数将在被matlab调用时作为入口(而不是main作为入口)mexPrintf("Hello world! %d argument(s) read...\n",nrhs);//相当于C中的printfif(nrhs!=INPUT_ARG) mexErrMsgIdAndTxt("Input:Erro","%d input argument(s) required",INPUT_ARG);//报错信息,还有一种更简单的函数可用:mexErrMsgTxt("string")//注意错误ID部分的格式:以字母起始,中间没有空格plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);//申请输出数组的空间,令人惊讶的是这件事情并不能被matlab自动完成,直接调用将导致崩溃//本例中申请了1*1的实浮点数数组,并将包括该数组指针在内的结构体返回给plhs[0]testFunction(mxGetPr(plhs[0]),mxGetPr(prhs[0]));//调用测试函数,本例只传一个输入的变量,重写一个输出变量,如果需要多个变量,列出它们即可//本例传递的是指针,应当注意的是prhs[0]本身是一个结构体,mxGetPr的作用是取出该结构中指针if(nlhs!=OUTPUT_ARG) mexErrMsgIdAndTxt("Output:Erro","%d output argument(s) required",OUTPUT_ARG);//报错信息,一旦输出出错,比如本例在matlab中使用[a,b]=C_api_test(10)如果没有这个检查,matlab将崩溃
}void testFunction(double *outputArray,double *inputArray)
{//此函数内可以直接重写输出内容if(*inputArray>0) *outputArray=1;else if(*inputArray<0) *outputArray=-1;else *outputArray=0;
}//首先在matlab中完成mex配置,在matlab命令行中输入mex -setup来完成设置
//完成该段代码后,在matlab中进入该目录,输入mex C_api_test.c来进行文件的编译
//之后仍在该目录中,输入test=C_api_test(10)测试

1.保证机器上至少有一个可用的c语言编译器
2.在matlab命令行中敲mex -setup按提示配置
3.按上述格式编写.c文件,注意mexFunction是matlab调用C函数时的入口(作用类似main())
4.mex 文件名.c编译得到.mexw64文件(保证此.c文件及其关联文件处在工作路径下),同目录下创建同文件名的.m文件作为说明(以%为注释起始标志,支持matlab注释语法)

matlab C 混编 --- 在MATLAB中使用c语言函数相关推荐

  1. c++ python opencv_ubuntu下C++与Python混编,opencv中mat类转换

    C++ 与 Python 混编 因为赶项目进度,需要使用到深度学习的内容,不过现有的深度学习框架大多使用python代码,对于不会改写C++的朋友来说,需要耗费大量的时间去改写,因此,使用python ...

  2. c++与oc混编之c++中调用oc方法

    项目中用到了C++与OC混编,正好有时间来总结一下. 基本思路: C++中是不能直接调用OC代码的,所以要通过一个中介--C,来让他们建立联系,从而实现在C++中调用OC代码. 1.新建C++文件 X ...

  3. c#调用c语言的自定义函数,[转]在C#中调用C语言函数(静态调用Native DLL,Windows Microsoft.Net平台)...

    对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P/Invoke是什么呢?简单地说,就是在.Net中调用本地代码(Native code)的一种解决方案.所谓" ...

  4. JAVA中调用C语言函数简单教程

    背景知识 本地代码 在JAVA中使用其他语言的代码(如C/C++)称为本地代码. 历史原因 JAVA的早期阶段,很多人认为使用C和C++来加速JAVA应用中的关键部分是个好主意,但是实际上,虽然JAV ...

  5. java中调用c_java中调用c语言函数?

    拉丁的传说 要在java中调用c语言的库,需要使用Java提供了JNI.举例说明在c语言中定义一个 void sayHello()函数(打印Hello World);然后在Java中调用这个函数显示H ...

  6. c 与matlab混编,谈谈Matlab与C/C++或C#的互调用(混合编程)

    记得当初一个师姐问我知不知道如何在Matlab里调用C++的程序,还真把我问住了.因为我以前就知道C++调用Matlab的方法,这方面网上资料一大堆.没想到现在自己突发奇想又遇到另外一个问题,Matl ...

  7. mvc中嵌入html,MVC Razor与javascript混编(js中嵌入razor)

    其中的关键是输出js上的纯文本内容,让浏览器解析为其中的js代码 BUI.use('common/main',function(){ var config = [ { id: '1', menu: [ ...

  8. matlab复数向极坐标转换_matlab中如何将极坐标函数转化为直角坐标函数并绘图

    alpha=pi/6;sigmaH=48.6%最大水平地应力;sigmav=53.68%垂向地应力;K=93500%切变模量;v=0.218%泊松比;k=2.128;fori=1:100r=i;for ...

  9. OC与c混编实现Java的String的hashcode()函数

    首先,我不愿意大家需要用到这篇文章里的代码,因为基本上你就是被坑了. 起因:我被Java后台人员坑了一把,他们要对请求的参数增加一个额外的字段,字段的用途是来校验其余的参数是否再传递过程中被篡改或因为 ...

最新文章

  1. php 检测服务器网速_php测试用户网速
  2. 深入理解 C# 协变和逆变【转】
  3. Spring Cloud【Finchley】-05使用配置文件自定义Ribbon Client
  4. AC日记——计算多项式的导函数 openjudge 1.5 38
  5. 基于Boost.Thread 的测试
  6. 斗地主案例的需求分析
  7. bom .dom_MicroProfile 2.2 BOM导入支持
  8. 基于element-ui,vue的html随机点名器
  9. java进程内存一直没释放_五分钟彻底搞懂你一直没明白的Linux内存管理
  10. RuoYi-Vue 部署 Linux环境 若依前后端分离项目(jar包+nginx 单机版本)
  11. 实战:Redis哨兵模式(上)
  12. 网络设计分层设计的原理
  13. 欧拉函数、中国剩余定理背诵用模板
  14. C#WebClient常见用法
  15. static library libs/libvpx/libvpx.a is not portable!
  16. 30分钟学会正则表达式
  17. 短视频拍摄5大景别及11种运镜手法,新手必备拍摄干货丨国仁网络资讯
  18. Spring-AOP 代理,增强
  19. Python-静态网页示例-豆瓣电影Top250
  20. 对于c++面向对象的深刻认识和理解--哲学角度看问题(源生论)

热门文章

  1. win8计算机上工具选项在哪,Start8、ViStart等八种工具帮你找回Windows 8开始菜单
  2. PMP证书能直接升级项目管理专业人员能力评价(CSPM)三级吗?
  3. Spring Security OAuth2 SSO 单点登录
  4. 云台山走出来的慈善家——李亮先生
  5. Linux 的变量类型
  6. UE4-(UI)第六十四课Grid Panel
  7. 海康 nvr获取历史视频流
  8. 4.20作业--jQuery
  9. “数据星河”系列活动——大数据资源化、资产化、资本化路径
  10. Java –如何对所有流整数求和