在Matlab中调用C/C++程序<二>

来源:互联网 发布:互联网进入大数据时代 编辑:程序博客网 时间:2024/05/29 14:29

本文转载自:herohbc


这篇文章介绍一下Matlab为mexFunction提供的一些常用函数。在调用这些函数的时候,只需要包含头文件mex.h即可。

1. 输出函数

1.1  void mexErrMsgTxt(const char *error_msg);

在Matlab的Command Window中显示错误信息,并终止程序运行。

如用来判断输入参数的个数是否正确。

if (nrhs != 1)
 {
  mexErrMsgTxt("One input argument required.");
 }

 

1.2 void mexErrMsgIdAndTxt(const char * identifier,  const char * err_msg, ...);

在Matlab的Command Window中显示错误信息的标识符和具体内容,并终止程序运行。 identifier表示错误信息的标识符,可以标明错误发生的位置和类型等信息。后面的省略号可以用来输出额外的参数。这个函数的用法和C语言的printf有点相似。

如用来判断输出参数的个数是否正确。

if (nlhs > 1)

{
  mexErrMsgIdAndTxt( "MATLAB:yprime:maxlhs", "Too many output arguments.");

}

也可以写成下述形式。

if (nlhs > 1)

{
  mexErrMsgIdAndTxt( "MATLAB:yprime:maxlhs", "There are %d output arguments.", nlhs);

}

 

1.3 void mexWarnMsgTxt(const char *warn_msg);

在Matlab的Command Window中显示警告信息,但并不终止程序运行。用法与mexErrMsgTxt函数相同。

 

1.4 void mexWarnMsgIdAndTxt(const char * identifier,  const char * warn_msg, ...);

 在Matlab的Command Window中显示警告信息的标识符和具体内容,但并不终止程序运行。用法与mexErrMsgIdAndTxt函数相同。

 

1.5 int mexPrintf(const char *fmt, ...);

 在Matlab的Command Window中输出格式化的文本信息,和C语言的printf函数用法相同。

 

2. 数据操纵函数

2.1 size_t mxGetM(const mxArray *pa);

获得pa所指向的数组的行数。在Win32平台上,typedef unsigned int size_t;

 

2.2 size_t mxGetN(const mxArray *pa);

获得pa所指向的数组的列数。

 

2.3 double *mxGetPr(const mxArray *pa);

获得pa所指向的数组的首地址。这时pa指向的数组必须是double类型的。要注意的是,在pa所指向的数组元素是按列存储的,和C语言的按行存储不同。但数组下标和C语言一样,也是从0开始。

 

2.4 double mxGetScalar(const mxArray *pa);

返回pa所指向的数组的第一个实数。如果mxArray不是double类型,则自动转化为double类型。大多数情况下,当pa只指向的mxArray只有一个元素时,可以使用该函数。

 

2.5 bool mxIsEmpty(const mxArray *pa);

判断pa所指向的mxArray是否为空。如果为空,则返回1;否则返回0。

 

2.6 bool mxIsNumeric(const mxArray *pa);

判断pa所指向的mxArray是否为数值。如果是,则返回1;否则返回0。

 

2.7 mxArray *mxCreateDoubleMatrix(mwSize m, mwSize n, mxComplexity flag);

创建一个double类型的矩阵,初值设为0,m表示行数,n表示列数。flag可取值为mxREAL或mxCOMPLEX,表示实数矩阵或复数矩阵。返回矩阵的首地址。同样注意,矩阵的元素是按列存储的。

typedef size_t    mwSize;

typedef enum
{
    mxREAL,
    mxCOMPLEX
}mxComplexity;

如第一个输出参数是一个10*10的实数矩阵。

plhs[0] = mxCreateDoubleMatrix(10, 10, mxREAL);

 

2.8 mxArray *mxCreateDoubleScalar(double value);

创建包含一个元素的double类型矩阵,并将值设置为value。

 

未完待续……


原创粉丝点击