编译环境:matlab R2010b
vc 6.0
操作系统 window xp sp3
过程如下:
1.安装matlab 和c/c++编译器:
在Matlab环境中分别运行
mex -setup
并进行相关配置
mbuild -setup
同样进行相关配置
(网上教程很多,一下同)
2.新建.m文件myadd.m
function y=myadd(a,b)
y=a+b;
3.编译生成dll
mcc -W cpplib:myadd -T link:lib myadd.m
生成的文件中有myadd.h ,myadd.lib,myadd.dll
4.vc新建工程
在工具->选项->include目录中包含:...MATLAB/R2010B/EXTERN/INCLUDE
lib目录中包含....MATLAB/R2010B/EXTERN/LIB/WIN32/MICROSOFT
然后通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加相关的lib文件名例如mclmcrrt.lib
然后复制文件myadd.h ,myadd.lib,myadd.dll工程目录下
5.编写代码
#include <iostream.h> #include "myadd.h" //using namespace std; //没有加这句而只加上面这句(或在工程设置里加上DLL.lib)会链接错误 #pragma comment(lib,"myadd.lib") //mclmcrrt.lib void main() { double* x = new double[2]; double* y = new double[1]; if(!mclInitializeApplication(NULL,0)) cout<<"InitializeApplication failed"; myaddInitialize(); x[0]=1.0; x[1]=2.0; mwArray mwx(1,2,mxDOUBLE_CLASS); mwx.SetData(x,2); mwArray mwy(1, 1, mxDOUBLE_CLASS); myadd(3,mwy,mwx(0),mwx(1)); mwy.GetData(y,1); // c=myadd(a,b); //mwx.SetData(x, 2); //mwx.GetData(y, 1); //cout<<y[0]; myaddTerminate(); cout<<y; //返回后还需要将mwArray转回C++类型数据 /* for(i=0;i<6;i++) cout<<x[i]<<' ';*/ mclTerminateApplication(); //myadd(int nargout, mwArray& y, const mwArray& a, const mwArray& b); }