2024年1月16日发(作者:)

matlab调用dll实例

% 用loadlibrary函数, 根据epanet2.h中的函数定义,加载

loadlibrary('c:','c:epanet2.h');

% 查看支持的函数接口

libfunctions epanet2 -full

% [int32, string, string, string] ENopen(string, string, string)

% int32 ENsolveH

% [int32, singlePtr] ENgetnodevalue(int32, int32, singlePtr)

a1='';

a2='';

a3='';

a_1=libpointer('stringPtr',a1);

a_2=libpointer('stringPtr',a2);

a_3=libpointer('stringPtr',a3);

[d,a_1,a_2,a_3]=calllib('epanet2','ENopen',a1,a2,a3);

calllib('epanet2','ENsolveH');

c1=12;

c2=11;

demand=0;

c3=demand;

c_3=libpointer('singlePtr',c3);

[t,c_3]=calllib('epanet2','ENgetnodevalue',c1,c2,c_3)

calllib('epanet2','ENclose')

unloadlibrary('epanet2')

ENopen是打开文件函数,ENsolveH是水力计算函数,ENgetnodevalue是得到某个节点的value值。

epanet是管网水力计算的一个软件。

问得很好,我最近也在做这个,不过我这个难度更高,要用VC生产lib文件,并用Matlab调用。目前还没有找到实现办法,倒是发现了用VC生成dll文件,并用Matlab调用的方法。

VC-new-win32 dynamic link library,然后写好c文件和h文件,编译后既可以生成dll文件。

在matlab里写一个M文件(函数或脚本都可以),然后用loadlibrary('','xxx.h');把dll读进maltab。dll文件和h文件要放在matlab能找到的目录,再用calllib来调用dll里面的函数。

谢谢分享!我刚才也实现了一个matlab调用VC++6生成的dll,费了好长时间终于成功。

期间遇到的问题就是loadlibrary成功了,但是里面想调用的函数没有加载上。分析了一下,发现是C++的问题。大概是matlab支持C而非C++,所以在VC++6中将要调用的函数声明为extern “C”, 然后重新生成dll,再用楼主的方法调用,终于成功了。

我用matlab写了个界面,然后用VC++6写了dll函数,用.m文件读取界面上的参数,调用dll计算,再把计算结果送到matlab的界面上显示。貌似麻烦了点,但是事实证明是行得通的,而且界面很漂亮,个人认为相当满意,庆祝一下