【混合编程】Matlab和C++混编

文章目录

  • 编译
    • 第一步:使用下面命令编译cpp文件
    • 第二步:写mexFunction
  • 在matlab中使用C和C++
    • 数值传递
      • matlab → \to c++
      • c++ → \to matlab
    • 字符串的传入与传出
      • matlab → \to c++
      • c++ → \to matlab

编译

第一步:使用下面命令编译cpp文件

eval('mex  -O -largeArrayDims add.cpp  -output ./add')

-I //(big i) .h file path

-l //(small l) lib path

-output // output file path

第二步:写mexFunction

数值的传递:参考网址 http://blog.csdn.net/yimiyangguang185/article/details/52623075
自己定义一个包含mexFunction的文件

#include 
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){
    // read elements from input
	double rst=mxGetScalar(prhs[0])+mxGetScalar(prhs[1]);
    // create output format
	plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);
    // set output value
	double *z=mxGetPr(plhs[0]);
	z[0]=rst;
}

在matlab中使用C和C++

参考网址:http://blog.csdn.net/pursh0000/article/details/51314340

数值传递

matlab → \to c++

x = mxGetScalar(prhs[0]);
//该函数获取matlab传递过来的数值;

c++ → \to matlab

plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL);
//创建返回的矩阵,范围plhs[0]为mxArray类型
y = mxGetPr(plhs[0]);
//获取返回plhs[0]的数据地址,其后可以修改y的值就可以返回了

字符串的传入与传出

matlab → \to c++

char *input_buf;
input_buf = mxArrayToString(prhs[0]);//使用mxArrayToString将mxArray转换为c、c++字符串

c++ → \to matlab

char *output_buf;//定义字符串缓存
size_t buflen = (mxGetM(prhs[0]) * mxGetN(prhs[0])) + 1;//获取字符串长度,mxGetM获取行数,mxGetN获取列数
output_buf=mxCalloc(buflen, sizeof(char));//使用mxCalloc分配输出字符串数组
plhs[0] = mxCreateString(output_buf);//使用mxCreateString创建mxArray输出
mxfree(output_buf);

你可能感兴趣的:(编程技术,matlab,c++)