matlab如何调用dll文件

matlab如何调用dll文件,第1张

基于DLL形式VC调用MATLAB函数方法

如果在一MATLAB中或VC中写好了函数的话,想在对方的环境中使用,直接将对方语言的函数编译成DLL是一个很方便的方法,不需要重写了。今天把基于DLL形式VC调用MATLAB函数的主要过程写下,在后续将写一下MATLAB调用VC函数的方法。

1,MATLAB中编译DLL

在MATLAB中写好函数,保存在mtTestFun.m中,使用mcc -W cpplib:mtlibTestFun -T link:lib mtTestFun.m生成DLL,用这个命令生成的是C++形式的,即MATLAB数据类型可以用类;否则用其他的命令生成的C形式的,不能用类。并生成了相应的其他mtlibTestFun.h,mtlibTestFun.lib和mtlibTestFun.dll在内的一些文件

2,VC中引用MATLAB环境

需要引用的.h文件路径为MATLAB安装目录的Extern\Include,需要引用的.lib文件路径为MATLAB安装目录的Extern\Lib\Win32\Microsoft;引入附加库mclmcrrt.lib

3,VC中调用MATLAB函数

将刚才MATLAB编译生成的文件全拷到当前VC工程下,只将mtlibTestFun.h文件加入到当前工程,并在需要调用的文件中包含;引入附加库mtlibTestFun.lib。在VC初始化函数里用下面函数进行初始化

mclInitializeApplication(NULL,0)

mtlibTestFunInitialize()

在结束时用下面函数释放

mtlibTestFunTerminate()

mclTerminateApplication()

下面在需要的地方调用,假设是下面的形式

mtlibTestFun(int nargout, mwArray&y, const mwArray&I, const mwArray&th)

nargout是返回参数个数,这里是1,后面y反演向量则是传出参数,I和th则是传入参数辐射值和切高。

C++数据传入MATLAB函数时需要将其转化成mwArray类型

double* pI = new double[row*column]

pl = ...

mwArray mwI(row, column, mxDOUBLE_CLASS)

mwI.SetData(pI, row*column)

返回后还需要将mwArray转回C++类型数据

double* pY = new double[Yrow*Ycolumn]

mwY.GetData(pY, Yrow*Ycolumn)

当然,对于一维数组数据来说,这样调用是没有问题的,但是对于二维矩阵数据来说,上面的调用会发生数据传入和传出错误。因为C++与MATLAB数组存储顺序不一样,MATLAB是列优先与C++中的行优先不同。这个数据的转换也将在后续给出一些解决办法。

1、首先,检查dll文件是否存在,并且是否在matlab的搜索路径中,如果不在,可以使用matlab的addpath函数添加路径。

2、检查dll文件是否有效,可以使用matlab的loadlibrary函数加载dll文件,如果加载失败,则可能是dll文件有问题。

3、检查dll文件是否有调用的函数,可以使用matlab的calllib函数调用dll文件中的函数,如果调用失败,则可能是dll文件中没有调用的函数。

4、检查dll文件是否有参数,可以使用matlab的libfunctions函数查看dll文件中的函数参数,如果没有参数,则可能是dll文件中没有参数。

5、检查dll文件是否有返回值,可以使用matlab的libfunctions函数查看dll文件中的函数返回值,如果没有返回值,则可能是dll文件中没有返回值。

可以。matlab是MATrixLABoratory的缩写,是一款由美国TheMathWorks公司出品的商业数学软件。matlab软件是一种用于算法开发、数据可视化、数据分析以及数值计算的计算机软件,matlab可以同时加载多个dll。matlab软件主要用于数值运算,利用附加工具箱可使用在控制系统设计与分析、图像处理、信号处理与通讯和金融建模。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11550741.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存