Matlab调用C++ DLL

见百度文库:

http://wenku.baidu.com/view/3427724fe45c3b3567ec8b4b.html###


为避免链接失效,将其文档全文粘贴在此:


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值