一 编译dll
在Command Window窗口中输入mbuild -setup,然后会出现语句,是否安装编译器,选择n,因为机子上已经安装了C/C++/C#的编译器,选择VS2010.
最后一切就绪后在窗口输入deploytool,会出现如下的框图,项目名称,存储位置和转化的类型选择C++ shared library,选择好之后,点击OK
这时出现了一个C++ Shared Library的窗口,将其最大化,下面有一个Exported Functions 里选择Add files将写好的matlab函数加进来,然后build,如下图
build 完成后刚才设定的文件夹下多了两个文件夹
然后就可以使用distrib中的dll了
二 使用
新建vs工程,配置包含目录和库目录
1.新生成的matlab函数的目录
2.matlab的目录,例如我的是D:\MATLAB2012\extern\include和D:\MATLAB2012\extern\lib\win64\microsoft。
并且在‘链接器->输入”中填入mclmcrrt.lib和刚生成的lib
3.编写代码
void initBinoTable(int *result){ // for(int i=4;i<666;i++) if(!getBinoTableInitialize()){ std::cerr<<"get bino table failed"<<endl; return; } int tn = 222; double tp = MAX_ANGLE_DIFF*2.0/180.0; double tepsi = E_MEANINGFULL_ELLIPSE; mwArray n(1,1,mxUINT32_CLASS); mwArray p(1,1,mxDOUBLE_CLASS); mwArray epsi(1,1,mxDOUBLE_CLASS); mwArray ret(1,tn+1,mxUINT32_CLASS); n.SetData(&tn,1); p.SetData(&tp,1); epsi.SetData(&tepsi,1); getBinoTable(1,ret,n,p,epsi); //入口函数 ret.GetData(result,tn); getBinoTableTerminate(); }
mwArray为传入传出参数的类型,赋值方法如代码所示。用到的几个函数都可以在生成的.h里面找到,所以注意include这个.h文件,打开这个.h可以看到
extern LIB_getBinoTable_CPP_API void MW_CALL_CONV getBinoTable(int nargout, mwArray& result, const mwArray& N, const mwArray& p, const mwArray& epsi);
这个主要函数,参数的意义分别为:返回参数的个数,返回参数,3个传入参数