Matlab调用DLL

Matlab调用DLL

(2012-04-20 10:42:06)


标签:

杂谈

分类: 编程之旅


  本来想把算法写成一个DLL的形式,这样既可以在控制软件中方便调用,又可以在Matlab中通过调用外部DLL的形式对算法进行仿真分析,所以需要了解Matlab调用外部DLL的方法,但是后来发现 Matlab调用DLL只支持用C语法写成的DLL,C++的一些关键特性如类、继承等都不支持,用起来的话局限性很大的,还不如单独再用M文件把算法再写一遍进行仿真呢。这里把 Matlab调用DLL的过程记录一下吧,以后有用到的时候再说。
  在Matlab的Help中搜索"Calling Functions in Shared Libraries"即可看到关于此内容的帮助文档。
  下面以一个简单的小例子演示 Matlab调用DLL的过程:
  1、编译器准备
    在Matlab的命令窗口输入:mex -setup
    选择你的编译器,我的是:
      [2] Microsoft Visual C++ 2008 SP1 in c:\Program Files\Microsoft Visual Studio 9.0 
  2、编写你自己的DLL
      在Visual Studio 2008中新建一个Win32的Dll工程,不妨设名字为MatlabDllTest
      编辑MatlabDllTest.cpp:
#include "MatlabDllTest.h"

double add(double x, double y)
{
    return
  (x+y);
}
    编辑MatlabDllTest.h:
#ifndef MATLABDLLTEST_H
#define MATLABDLLTEST_H

#ifdef __cplusplus
extern "C"
{
#endif

    __declspec(dllexport) double add(double x, double y);

#ifdef __cplusplus
}
#endif

#endif
  3、加载DLL:把编译连接之后产生的MatlabDllTest.dll和MatlabDllTest.h文件拷贝到Matlab的当前工作目录下,输入
      loadlibrary('MatlabDllTest','MatlabDllTest.h');
(一定要有这步,如果dll不成功,会显示错误原因)
 
  4、查看DLL中导出的函数
      libfunctions MatlabDllTest -full
    -full选项会列出导出函数的详细输入和输出参数,这是输出信息如下:
      Functions in library MatlabDllTest:
      double add(double, double)
  5、调用函数
      calllib('MatlabDllTest', 'add', 1.3, 4.6)
    此时就会输出正确的结果
      ans =
          5.9000
  总结:这个例子比较简单,只是为了演示整个过程,如果你是真的用到了Matlab来调用外部DLL的这种方式的话,就要注意你的DLL工程要符合Matlab的要求啦,详细信息请自己查看Matlab的帮助文件,我就不罗嗦了。
 


11

阅读 (14848) 评论 (9) 收藏 (2) 转载 (20) 喜欢 打印 举报
已投稿到:



转载列表:

    转载

    转载是分享博文的一种常用方式...


    前一篇: 工作简历
    后一篇: 生成dll注意事项




    matlab调用dll的小小启发

    首先matlab是支持同C的混合编程滴~

    我重点研究的是如何将C用在matlab中~

    调用dll技术是也~

    主要有两种方法~

    一种,是MEX~

    C函数可大体不变~

    只需一点小小的修改~

    也就是MEX固定滴一些语法~

    倘若是想实现矩阵的转置吧,设为change.c~

    一个输入,一个输出~

    又是假设:a = magic(4)~

    mex指令:mex change.c~

    会生成change.mexw32~

    mexw32就相当于dll,只是matlab版本问题罢了~

    直接b = change(a),就可得到想要结果~

    对了,为何要用MEX?~

    当然,主要是为了提速,当遇到特别大的循环时~

    另一种,matlab自带函数,调用动态链接库dll~

    先用用VC或者eclipse生成dll~

    都试了,也都可行~

    主要讲一下我用的eclipse吧~

    新建project——>Shared Library——>Empty Project——>MinGW GCC——>finish~

    添加.c和.h文件,主要有一点要注意,就是.h中必须要有这么一句~

    __declspec(dllexport) double add(double x, double y);~

    只是为了假设.c中有add函数~

    然后编译,就会生成dll~

    假设就是add.dll,和add.h一起移到matlab相应工作目录~

    只需这样使用:~

    loadlibrary add.dll~

    libfunctions('add'),这个是为了确定add是不是加载进去了~

    然后调用:calllib('add','add',5,4)

    结果就是9了~

    前一个add是dll,后一个add是函数~

    小结一下~

    以上主要就是MATLAB如何调用动态链接库dll~

    1
    0
    « 上一篇: 烽火缘--杨帆
    » 下一篇: isoverlap带给我的启发




    • 0
      点赞
    • 6
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值