m文件转c/c++,参数传递
在这里举一个例子说明如何在C代码中向一个转化后的m函数传递参数以及得到返回值。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function result=fork(file,M,a)
info = imfinfo(file);
A = imread(file);
imshow(A);
Width = info.Width;
Height = info.Height;
[m,n] = size(M);
aSum=0;
for i=1:m
for j=1:n
aSum = aSum + M(i,j);
end
end
aSum = aSum * a;
result=[Width,Height,aSum];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
用这条命令来编译文件:
mcc -t -W libhg:forkDll -T link:lib -h libmmfile.mlib libmwsglm.mlib fork
转化过程以及如何加入到VC工程中请看我的《简化m文件转化为c/c++文件,VC编译》。
让我们直接来看看VC中的代码:
///////////////////////////////////////////////////////////////////////////////
CString str;
str="C://SysFile//simon1//1-a.jpg";//根据你的情况选择其他的目录
mxArray *file = NULL;
file=mxCreateString(str.GetBuffer(str.GetLength()));//构造字符串参数
static double data[] = { 1, 4, 2, 5, 3, 6 };
mxArray *M = NULL;
mlfAssign(&M, mlfDoubleMatrix(2/* Rows */,
3/* Columns */,
data,
NULL/* No imaginary part */));
//构造矩阵参数
// M=[1 2 3;
// 4 5 6]
// if you want M.' , do this:
// Mt=mlfCtranspose(M);
double Scalar=10;
mxArray *a = NULL;
a=mlfScalar(Scalar); //构造标量参数
forkDllInitialize(); //初始化
mxArray *result=NULL; //构造返回值
result = mlfFork(file, M, a); //调用函数
double *hehe=NULL;
hehe=mxGetPr(result); //取得返回指地址
CString info;
info.Format("Width=%f Length=%f aSum=%f",
hehe[0],hehe[1],hehe[2]); //取得各个返回指
AfxMessageBox(info);
mxDestroyArray(file); //销毁参数
mxDestroyArray(M);
mxDestroyArray(a);
mxDestroyArray(hehe);
///////////////////////////////////////////////////////////////////////////////
以上例子演示了如何向m函数传递字符串,矩阵,标量,以及从返回指中获取多个变量
的方法。代码中的注释已经很详细了,我就不在解释。
关于这方面更详细的内容请参考matlab官方网站上的参考手册(apiref.pdf)。