MATLAB调用C++DLL

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB调用C++动态库的方法

声明:本人知识水平有限,文档中难免有错,望谅解!

一、方法步骤

1、首先确定你的动态库正确,并将你的动态库(例如:Demo.dll)和静态链接库

(Demo.lib)和自定义的相关头文件(例如:Demo.h等)拷贝到当前工作目录下,当然也可以将你的动态库拷贝到C盘的windows\system32目录下。

2、写.cpp文件,并用mex命令生成.mexw64或者.mexw32文件(这由你的系统决定),

其实,这个文件起转换作用。也就是说,你用MATLAB调用C++动态库就必须通过

这个文件去调用,而这个文件就是由.cpp文件生成的。

这个.cpp文件中必须包含这个mexFunction函数,格式也必须如下:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

nlhs:输出参数个数

plhs:输出参数列表

nrhs:输入参数个数

prhs:输入参数列表

不过函数名可以随便取的。在这个函数中你就可以去调用C++动态库的函数了。

记住头文件:”mex.h”……

注意:保存的文件名就是将来在MATLAB中调用的函数名,而不是这里的函数名。

3、使用mex命令编译XXX.cpp。如:mex xxx.cpp ;那么系统将生成xxx.mexw32或者xxx.mexw64

文件。这个文件的文件名就将是你要调用的函数名;

4、现在就可以写脚本调用这个函数了。

二、案例

1、现在生成了一个C++动态库Demo.dll\Demo.lib,还有头文件Demo.h;里面定义了一个函数

double Demo_Add( double x, double y); //功能:将两个数相加并返回

这些大家都知道,不用我说了吧。

2、在MATLAB中写一个c++文件Test.cpp:

#include "mex.h"

#include "Demo.h"

#pragma comment(lib,"Demo.lib")

void mexFunction(int nlhs, mxArray *plhs[],

int nrhs, const mxArray *prhs[])

{

if( nrhs != 2) //判断输入参数的个数

{

mexErrMsgTxt("输入参数个数不对!");

}

//得到传入的第一个参数,并转换了double类型

double p1 = *((double*)mxGetPr(prhs[0]));

//得到传入的第二个参数,并转换了double类型

double p2 = *((double*)mxGetPr(prhs[1]));

//创建一个1*1的实时double类型的矩阵

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);

//得到输出的第一个参数的指针

double *output = (double*)mxGetPr(plhs[0]);

//调用Demo.dll定义的函数实现功能,并将返回值给输出参数

*output = DEMO_Add(p1, p2);

}

3、在当前工作目录下只用mex Test.cpp编译,编译成功将生成MEX文件,Test.mexw32

或者Test.mexw64.

5、那么现在你就可以通过Test这个函数名去调用Demo_Add函数了.

我现在就写一个脚本文件First.m:

clc

clear

tic

x = 1.6;

y = 2.7;

Test_add = Test(x, y)

toc

6、run这个脚本.MATLAB调用C++动态库就成功了….

Author : Li Jun

Date :2012-03-26

相关文档
最新文档