(完整版)matlab和c++调用DLL方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab和C++调用DLL方法
Matlab可以调用外部DLL,如用C或C++写的DLL。本文分三个部分介绍Matlab和C++调用DLL方法。
一、C++写dll方法
二、C++调用dll
三、Matlab调用dll
一、C++写DLL方法
在CPP文件中和普通CPP没什么区别,在H文件中加上需要导出的函数名,格式如下:
extern "C" int __declspec(dllexport)add(int x, int y);
蓝色部分是函数返回的类型,红色部分是要导出的函数,就这么简单。下面是两个整数相加的代码:
main.h:
extern "C" int __declspec(dllexport)add(int x, int y);
main.cpp:
#include "main.h"
int add(int x, int y)
{
return x + y;
}
编译即可得到dll文件,我的工程名叫mydll,因此得到的是mydll.dll
二、C++调用DLL方法
将DLL文件拷入到源文件夹中,在CPP代码中引入windows.h文件,否则有些方法找不到,用指针来接受参数。装载DLL,用函数名,卸载DLL。代码如下:
#include
#include
using namespace std;
int main(void)
{
typedef double(*padd)(double a,double b);
double r;
HINSTANCE hDLL;
padd add;
hDLL=LoadLibrary("mydll.dll");
add=(padd)GetProcAddress(hDLL,"add");
r=add(5.3,8.6);
cout< FreeLibrary(hDLL); return 0; } 三、Matlab调用DLL 通常matlab调用DLL有两种方法,一种是用mex文件,另一种是用matlab的函数。 第二种简单一些,首先看第二种。 将DLL文件拷到matlab的工作目录,在matlab命令提示符下,输入 >> loadlibrary('mydll.dll','main.h') >> libfunctions('mydll') 会得到如下信息: Functions in library mydll: add 接着输入: >> calllib('mydll','add',3,5) ans = 8 >> 调用成功!可以看出matlab调用DLL主要用了loadlibrary 和calllib两个函数,搞定! Mex文件调用DLL 这种方法稍微麻烦一些,但是一劳永逸。 主要是通过mexfunction函数。代码如下: Test.cpp: #include "mex.h" void timestwo(double y[],double x[]) { y[0]=2.0*x[0]; } void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) { double *x,*y; int mrows,ncols; if(nrhs!=1)mexErrMsgTxt("One input required."); else if(nlhs>>1)mexErrMsgTxt("Too many output arguments"); mrows=mxGetM(prhs[0]); ncols=mxGetN(prhs[0]); if(!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows==1& &ncols==1)) mexErrMsgTxt("Input must be a noncomplex scalar double."); plhs[0]=mxCreateDoubleMatrix(mrows,ncols,mxREAL); x=mxGetPr(prhs[0]); y=mxGetPr(plhs[0]); timestwo(y,x); } 在matlab的命令提示符下,输入mex Test.cpp进行编译,能够得到Test.dll文件。将Test.dll拷入到工作目录,在matlab 中直接调用Test()函数即可,如Test(3),结果为6。这实际上是一种在matlab中的混合编程,能够用c或c++来书写。