matlab版本为:matlab7.11.0(R2010b) vs2008
1.在matlab中生成dll
在m文件中实现如下功能: 获得N个魔方矩阵的秩。m文件的内容如下: function r = mrank(n)
r = zeros(n,1); for k=1:n r(k) = rank(magic(k)); end
将上述内容保存为:mrank.m
在matlab的command 窗口键入: >> mcc -B csharedlib:mrank mrank.m %该命令将在后面做说明
在matlab7.0中执行上述命令后生成下面几个文件: mrank.exp mrank.exports mrank.h mrank.lib mrank.c mrank.dll
在vs2008中使用m文件的函数功能。 首先配置vs2008的环境 1.工具——> 选项——>项目和解决方案——>VC++目录 (1) 选择“可执行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(注意:当前的Mathlab安装在C:\Program Files下面) (2)选择“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include (3)选择“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib (4)选择“库文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft 上述环境只需要配置一次
对于每一个工程,做下面的设置 项目——>属性——>连接器——>输入 选择:附加依赖项:添加: libmex.lib libmx.lib libmat.lib mclmcrrt.lib
将mrank.h mrank.lib mrank.dll拷贝到当前目录下 cpp文件中中的内容如下: #include "stdafx.h" #include<stdlib.h> #include"matrix.h" #include"mrank.h" #include "mclmcrrt.h" #pragma comment(lib,"mrank.lib")
int main() { mxArray *N(NULL),*R(NULL); int n =12;
mrankInitialize();//初始化动态链接库 N = mxCreateDoubleScalar(n);//用n来初始化生成的数组,其实标量就是一个1*1的数组 mlfMrank(1,&R,N);//执行m文件的主要功能 size_t num = mxGetM(R);//R的行的个数 double *res = new double[num]; memset(res,0,sizeof(double)*num);
memcpy(res,mxGetPr(R),sizeof(double)*num);
for(int i=0;i<num;++i) printf("%f\n",res[i]);
delete[] res; mxDestroyArray(N); mxDestroyArray(R); mrankTerminate();//终止动态数据连接 return 0; }
上述cpp文件使用了Matlab编译m文件生成的dll,在cpp中通过mxArray这个数据结构来和dll中的方法进行信息交换。 这样就在cpp中调用了matlab中的m文件实现的方法。
mcc命令说明: http://www.cnblogs.com/juneja/archive/2008/10/31/1323423.html
|
请发表评论