Matlab C/C++ 混合编程

Matlab C/C++ 混合编程

  • Matlab调用C++程序,所用mexFunction定义函数:

    void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[])
    {
    }
    // 参数说明如下:
    // 1)nlhs(number of left hand size parameters):返回给Matlab的返回值变量个数;
    // 2)plhs(pointer of left hand size parameters):函数返回参数的指针;
    // 3)nrhs(number of right hand size parameters):函数传入参数个数;
    // 4)prhs(pointer of right hand size parameters):函数传入参数的指针;const表示不能改变其指向的内容,此时涉及到强制类型转换,由double转换为int。
    
    // 常用函数总结
    // mxGetScalar(prhs[0]):把prhs[0]传递进来的mxArray类型的指针指向的数据(标量)赋值给C程序的变量。
    // mxGetPr(prhs[0]):获取指向prhs[0]传进来的mxArray类型的double类型指针。
    // 对于矩阵数据,需要使用mxGetM()和mxGetN()函数获取相关信息;
    // data=mxGetPr(prhs[0]);  //获得指向矩阵的指针 
    // M=mxGetM(prhs[0]);      //获得矩阵的行数 
    // N=mxGetN(prhs[0]);      //获得矩阵的列数
    // 注意:Matlab中的矩阵元素b(i,j)在传递到C中的一维数组data后对应的为data[j*M+i]
    // mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag):用来申请m行n列的double类型矩阵空间,用于函数返回值。
    // mexErrMsgTxt(“Error”):给出错误提示并退出当前程序。
    // mxIsDouble():判断mxArray中的数据类型是否是double类型
    

    Matlab提供的API中,带mx-前缀多数是对mxArray数据进行操作的函数;而带mex-前缀则是与Matlab环境进行交互的函数。

    Matlab中基本单元为array,包括double array,cell array,struct array…,而在C语言中,Matlab的array对应使用mxArray,而在C++语言中,对应的为mwArray。

    mex函数是一种接口,它将C语言中的计算结果适当的返回给Matlab。当Matlab需要调用C语言编程的大型程序时,利用mex函数接口进行调用即可。Matlab与C/C++混合编程时,最好充分考虑到异常、错误等的处理。

    Matlab调用C程序方法有两种:

    1)mex文件实现:编写相关的mex函数,然后用mex编译即可。

    2)Matlab调用C的dll。其调用dll的步骤:打开动态链接库文件;调用函数准备数据;调用动态链接库文件中导出的函数;关闭动态链接库文件

  • C/C++调用Matlab方法

    调用Matlab计算引擎:混合编程后的可执行程序脱离不了Matlab的运行环境,运行速度很慢;

    利用mcc编译器生成的cpp和hpp文件:虽然能独立与Matlab运行环境,可在C/C++环境中包含生成文件非常繁琐

    利用mcc编译器生成个dll文件:可以简洁方便使C++/C调用Matlab程序。

你可能感兴趣的:(matlab)