Matlab 版 (精华区)
发信人: fork (撒哈拉沙漠的沙), 信区: Matlab
标 题: m文件转c/c++,参数传递
发信站: BBS 哈工大紫丁香站 (Mon Mar 21 09:27:56 2005)
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)。
--
段正游低声向范骅、华赫艮、巴天石诸人道:“这位萧大侠于我有救命之恩,待会危急
之际,咱们冲入人群,助他脱险。”范骅道:“是!”向拔刃相向的数千豪杰瞧了几眼,说
道:“对方人多,不知主公有何妙策?”段正淳摇摇头,说道:“大丈夫恩怨分明,尽力而
为,以死相报。”大理众士齐声道:“原当如此!”
※ 来源:·哈工大紫丁香 http://bbs.hit.edu.cn·[FROM: 202.102.144.36]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.096毫秒