matlab读取dll数据,Matlab如何调用动态连接库DLL文件的函数?

1、引言

最近在开发一个项目时,已经用C语言写好了主要算法部分,并将主要功能的实现以函数形式封装到了动态连接库DLL文件中,但客户要求提供Matlab调用DLL函数的例子,因此,花了点时间研究了下Matlab语言中调用DLL函数的方法,并记录下来以作后用。

为简单起见,下面以DLL文件中的一个简单的函数调用为例进行说明(当然是虚构的一个函数了,但也涉及到了常用参数类型如指针、字符串等的传递)。

2、DLL文件中函数原型说明

本例调用C语言编写的DLL文件“MyDll.dll”里的函数“MyFunc”,这个函数原型声明如下:

#define EXPORT extern "C" __declspec(dllexport)void MyFunc(double x0, double deltx, int length, double *y, double &lastData, char* status);

该函数产生一个初始值为x0、间隔为deltx、长度为length的一维数组y,并给出该数组的最后一个值lastData和函数的运行状态信息status。从函数的原型声明中可以看出,该函数中参数数据类型涉及到了“double”类型、“int”类型和“char”类型(字符串类型),在参数传递中也涉及到了值传递(x0、deltx、length)和指针(y、lastData、status)传递方式,较为复杂。为便于理解,下面给出该该函数的C语言实现代码。

6597338_202008201615050456542876_wm.jpg

3、Matlab调用方法

对于上面的MyFunc函数,在Matlab中调用主要涉及到了几个函数的使用,包括loadlibrary/unloadlibrary、libpointer、calllib等函数的使用,分别实现加载/卸载动态库、定义指针变量、调用函数等功能。

其Matlab中的调用代码如下所示:

6597338_202008201615180675393155_wm.jpg

其中,通过代码“libfunctions MyDll -full;”可以显示dll文件中所有的函数信息。

运行结果如下图所示:

6597338_202008201615260630_wm.jpg

可见,在Matlab中已经成功调用了dll文件中的MyFunc函数并得到了正确的运行结果。

4、备注

在使用calllib函数运行dll文件中的函数时,当参数中传递字符类型的指针变量(char *)时,其对应的变量如上例中pStatus的值不会改变,必须通过calllib的返回值得到更新后的值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值