(完整版)matlab和c++调用DLL方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++来书写。

相关文档
最新文档