zoukankan      html  css  js  c++  java
  • MATLAB调用VISUAL STUDIO 编写的C++函数

    测试平台:
    MATLAB 2014a VISUAL STUDIO 2013

    Matlab调用C++函数的相关格式和注意事项:

    以下是名为mexAdd.cpp这个c++文件的代码:

    #include "mex.h"    
     //必须有这个声明
    using namespace std;
    
    double add(double x, double y)
    //这是自定义的函数,整个函数要实现的功能
    {
         double s;
         s=x+y;
         return(s);//就是实现了加法的功能
    }
    
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    //必须定义这个函数mexFunction,这相当于一个参数传输机,构建起了MATLAB和VS之间桥梁
    {
    
    // nlhs: 感觉是number of left hand size parameters,也就是Matlab调用语句左边的变量个数,
    // 实际上就是需要返回给Matlab的返回值变量有多少个。例如上面c = add(a, b);就只有一个返回参
    // 数c,所以nlhs就是1;
    
    // plhs: 感觉是pointer of left hand size parameters,也就是函数返回参数的指针。但它是一个指
    // 针数组。换句话说,它是一个数组,每个元素是个指针,每个指针指向一个数据类型为mxArray
    // 的返回参数。例如上面c = add(a, b);就只有一个返回参数c,所以该数组只有一个指针,plhs[0]
    // 指向的结果会赋值给c。
    
    // nrhs: 这个是number of right hand size parameters,也就是Matlab调用语句右边的变量个数。
    // 例如上面c = add(a, b),它给c++代码传入了两个参数a和b,所以nrhs为2;
    
    // prhs:这个是pointer of right hand size parameters,和plhs类似,因为右手面有两个自变量,
    // 即该数组有两个指针,prhs[0]指向了a,prhs[1]指向了b。要注意prhs是const的指针数组,
    // 即不能改变其指向内容。
    
        double *a;
        double b, c;
        plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
        a = mxGetPr(plhs[0]);
        b = *(mxGetPr(prhs[0]));//输入量传给b
        c = *(mxGetPr(prhs[1]));//输入量传给c
    
        *a = add(b, c);         //调用add()函数
    
    }

    接下来就是在MATLAB里面调用c++函数的代码(前提已经选择好了VS作为默认的编译器):

    mex mexAdd.cpp

    然后MATLAB命令窗口会出现:

    使用 ‘Microsoft Visual C++ 2013 Professional’ 编译。MEX 已成功完成。

    然后就调用函数:

    n=mexAdd(0.5,3)//注意不是调用add(0.5,3)!

    结果n=3.5就对了,大功告成。

    参考:

    1. http://blog.sina.com.cn/s/blog_6ec1700e0100rqlh.html
    2. http://blog.csdn.net/zouxy09/article/details/20553007

    2016年3月10日补充:MATLAB C++ Resources 这是MATHWORK公司推出的M文件和C转换的教程。有时间可以研究研究嘿嘿。这是他们的介绍文档:MATLAB TO C MAKE EASY

  • 相关阅读:
    “扫一扫”模型
    CenterNet算法介绍
    PyTorch搭载的CenterNet算法环境配置
    软件评测
    代码规范制定
    寒假作业 2/2
    软件工程实践总结&个人技术博客
    React 请求拦截与接口统一和模拟解决方案
    软件评测
    结对作业二
  • 原文地址:https://www.cnblogs.com/vincentQin/p/5406011.html
Copyright © 2011-2022 走看看