声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2481|回复: 6

[混合编程] Matlab如何调用DLL?

[复制链接]
发表于 2016-3-3 15:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本来想把算法写成一个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:
  1. #include "MatlabDllTest.h"

  2. double add(double x, double y)
  3. {
  4.     return (x+y);
  5. }
复制代码


编辑MatlabDllTest.h:
  1. #ifndef MATLABDLLTEST_H
  2. #define MATLABDLLTEST_H

  3. #ifdef __cplusplus
  4. extern "C"
  5. {
  6. #endif

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

  8. #ifdef __cplusplus
  9. }
  10. #endif

  11. #endif
复制代码


加载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的帮助文件,我就不罗嗦了。
转自:http://blog.sina.com.cn/s/blog_70b3b3a701015e98.html
回复
分享到:

使用道具 举报

发表于 2016-12-15 16:00 | 显示全部楼层
楼主,我新手,看了您的这个帖子还是不会调用dll文件啊

补充内容 (2016-12-16 18:46):
少了加载那一步啊,我不会c啊,谁懂哦……
发表于 2016-12-15 16:03 | 显示全部楼层
楼主能不能加我私聊啊,跪谢。
企鹅:942611766

点评

会调用dll的可不可以花点时间教我一下??学会之后一定发个让您满意的大红包……  发表于 2016-12-16 19:02
发表于 2016-12-16 08:38 | 显示全部楼层
多谢分享  学习了
发表于 2016-12-16 19:01 | 显示全部楼层
qq942611766 发表于 2016-12-15 16:03
楼主能不能加我私聊啊,跪谢。
企鹅:942611766

会调用dll的可不可以花点时间教我一下??学会之后一定发个让您满意的大红包……
发表于 2016-12-19 08:32 | 显示全部楼层
多谢楼主指导
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-3 09:04 , Processed in 0.064438 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表