环境变量path中要加入matlab的bin目录:即加上X:/XXXXXX/MATLAB/R2009a/bin/win32
不管用VS也好,还是VC6.0也好,VC6中是打开Tool→Options→Directories,VS中是打开Tool→Options→Project and Solution→VC++ Directories,然后添加以下东西:
这样C++端就完成配置了。
配置完上面的东西,就可以了~
文件一开始要添加lib文件,代码如下:
#pragma comment(lib,"libdflapack.lib") #这个文件在2010a里面找不到,要去掉#pragma comment(lib,"libemlrt.lib")#pragma comment(lib,"libeng.lib")#pragma comment(lib,"libfixedpoint.lib")#pragma comment(lib,"libmat.lib")#pragma comment(lib,"libmex.lib")#pragma comment(lib,"libmwlapack.lib")#pragma comment(lib,"libmwservices.lib")#pragma comment(lib,"libmx.lib")#pragma comment(lib,"libut.lib")#pragma comment(lib,"mclcommain.lib")#pragma comment(lib,"mclmcr.lib")#pragma comment(lib,"mclmcrrt.lib")1.2.3.4.5.6.7.8.9.10.11.12.13.
注意一下倒数第三个,据说matlab后面的版本是mclcommain.lib,之前的版本是mclco.lib,没考证,出了问题你去之前添加的lib路径下看一下就知道了。
然后添加你自己刚刚生成的lib文件
#pragma comment(lib,"XXX.lib")1.
之后必然要包含你自己的头文件啦。。
#include "XXX.h"1.
至于怎么用那些函数,简单说明一下,首先声明一下,下文中提到的XXX都是你在上面第五步中写的工程名,也就是上面lib和.h的XXX一样。
调用之前要先初始化,即调用函数:
XXXInitialize();1.
经过试验,上面那个函数的运行之间极其之长。。。
当然,在结束调用,或者在程序的尾部要调用:
XXXTerminate();1.
调用函数呢,就是你m文件的函数名,对了,众所周知m文件的文件名要和m文件里面的函数名一样,但是m文件的函数名不一定要和这里设置的Project一样,比如说函数名叫myfunction(),而工程名叫test,那么你生成的就是test.h,test.dll,test.lib,但是你在C++代码里面调用的时候用的却是myfunction。
如果你的myfunction没有输入输出参数,那么调用的时候就直接写myfunction()就可以了,如果有输入输出参数,函数调用格式是:
myfunction(int nargout, mwArray& matrix...,const mwArray& n1....);1.
直接理解就是输出参数个数nargout
然后nargout个输出参数,数据类型是mwArray,稍有常识的人只要看到函数调用里面有&就基本是输出参数啦~
然后就是各个输入参数,数据类型也是mwArray,看到const就知道应该是输入参数啦~
啥?你问我为什么不用写输入参数个数,好好复习matlab函数去!!!
这个是matlab生成的dll的接口数据类型,这个看上面的函数调用你就应该清楚这一点了,定义在matlab安装目录下的extern/include/下的mclcppclass.h下,有兴趣的自己看去~
虽然还有一种数据类型是mxArray,但是不推荐使用,而且mwArray本身就是对mxArray的封装!不推荐使用是因为它的内存管理方式不好,而且使用的时候要用指针,而mwArray你可以直接作为对象来操作。【如果要生成接口为mxArray的dll的话,也可以在matlab命令行里面使用申明,但都说了。。不推荐。。】
matlab里面不特别说明数据类型都是double,但是在这里定义一个mwArray数据的时候要说明类型,定义方法如下:
mwArray matrix(2,2,mxDOUBLE_CLASS);mwArray matri2(1,m,mxINT8_CLASS);1.2.
如果要赋值或者读取,方法如下:
mwArray matrix(1,4,mxDOUBLE_CLASS);double a[] = {1,2,3,4};matrix.SetData(a,4);cout<<matrix(1,2)<<endl;double *b = new double[4];matrix.GetData(b,4);cout<<b[0];1.2.3.4.5.6.7.8.9.
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删