墨西哥人文件升级到使用图形对象
MATLAB®版本8.4 (R2014b)变化的数据类型处理的图形对象双
来对象。
在8.4版本之前,墨西哥人文件使用C / c++和Fortran API参考库函数mexGet
和mexSet
,它将输入句柄参数声明为类型双
。如果你的墨西哥人函数使用mexGet
或mexSet
,MATLAB显示以下错误。
错误使用墨西哥人弃用墨西哥人函数mexGet | mexSet叫。要么更新源代码使用mxGetProperty | mxSetProperty,或重新运行墨西哥人-DMEX_DOUBLE_HANDLE添加到命令行输入兼容模式。
升级你的墨西哥人文件,考虑下列一个或多个操作。
取代mexGet
和mexSet
功能
升级一个墨西哥人文件使用图形对象,调用替换mexGet
与mxGetProperty
和调用mexSet
与mxSetProperty
。以下程序清单显示源墨西哥人文件之前和之后的一个例子。
下面的代码使用mexCallMATLAB
创建一个情节,它返回变量的图形处理plhs [0]
。改变线的颜色,使用示例mxGetScalar
将句柄双
,然后将其传递到mexGet
和mexSet
。
# include”墨西哥人。h" #define RED 0 #define GREEN 1 #define BLUE 2 void fill_array(double *x) { int i = 0; for(i = 0 ; i < 4 ; i++) { x[i] = i+1; } } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mxArray *color; int ret; double handle; mxArray *copycolor; double *acolor; mxArray *data = mxCreateDoubleMatrix(1,4,mxREAL); fill_array(mxGetPr(data)); ret = mexCallMATLAB(1,&plhs[0],1,&data,"plot"); if(!ret) {处理= mxGetScalar (plhs [0]);颜色= mexGet(处理,“颜色”);copycolor = mxDuplicateArray(颜色);acolor = mxGetPr (copycolor);acolor(红色)= (1 + acolor(红色))/ 2;acolor(绿色)= acolor(绿色)/ 2;acolor(蓝色)= acolor(蓝色)/ 2;mexSet(处理,“颜色”,copycolor);mxSetProperty (plhs[0] 0“颜色”,copycolor);}}
当您构建这个墨西哥人文件,MATLAB显示一条错误消息。
修改源文件,使下面的编辑。这段代码使用的变量plhs [0]
在mxGetProperty
得到颜色
直接的财产。没有必要创建一个中间处理
变量。
# include”墨西哥人。h" #define RED 0 #define GREEN 1 #define BLUE 2 void fill_array(double *x) { int i = 0; for(i = 0 ; i < 4 ; i++) { x[i] = i+1; } } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { mxArray *color; int ret; mxArray *copycolor; double *acolor; mxArray *data = mxCreateDoubleMatrix(1,4,mxREAL); fill_array(mxGetPr(data)); ret = mexCallMATLAB(1,&plhs[0],1,&data,"plot"); if(!ret) {颜色= mxGetProperty (plhs[0], 0,“颜色”);copycolor = mxDuplicateArray(颜色);acolor = mxGetPr (copycolor);acolor(红色)= (1 + acolor(红色))/ 2;acolor(绿色)= acolor(绿色)/ 2;acolor(蓝色)= acolor(蓝色)/ 2;mxSetProperty (plhs[0] 0“颜色”,copycolor);}}
建造这个墨西哥人文件,类型:
墨西哥人mymex.c
建筑的Microsoft Visual c++ 2012 (C)”。墨西哥人成功完成。
或者,您可以构建最初的源文件遵循的步骤我想重建墨西哥人源代码文件。
墨西哥人
自动转换处理类型
如果你的墨西哥人函数使用mexCallMATLAB
或mexGetVariable
函数来得到一个图形处理和通过句柄mexGet
和mexSet
api,然后自动检测到的行为和你的墨西哥人MATLAB函数继续执行正确。你知道墨西哥人函数使用这种模式如果函数执行没有错误。
如果你在MATLAB R2014b或重建这个墨西哥人文件之后,MATLAB显示一条错误消息。重建文件,按照说明取代mexGet和mexSet功能或我想重建墨西哥人源代码文件。
我想重建墨西哥人源代码文件
如果你重建你的墨西哥人在MATLAB R2014b源文件或之后,MATLAB显示一条错误消息。
您可以使用墨西哥人
命令兼容性国旗,-DMEX_DOUBLE_HANDLE
,建立处理图形对象的墨西哥人文件。如果墨西哥人函数调用一个函数,返回一个图形处理使用mexCallMATLAB
或mexGetVariable
MATLAB函数,自动检测和转换处理类型。建立源文件,mymex.c
类型:
墨西哥人-DMEX_DOUBLE_HANDLEmymex.c
如果你通过图形处理一个墨西哥人函数,转换处理双
在调用函数之前。有关更多信息,请参见我没有墨西哥人源代码文件。
我没有墨西哥人源代码文件
如果你得到一个运行时错误,你没有源代码,您可以使用以下方法。使用这个方法只对墨西哥人将图形句柄作为输入参数的函数。
在你通过墨西哥人的图形处理功能,首先将处理转换成双。例如,如果您调用墨西哥人函数mymex
:
Y = 1:10;h =情节(Y);mymex (h)
然后添加声明转换处理h
双:
Y = 1:10;h =情节(Y);h =双(h);mymex (h)