matlab如何使用指针,Matlab调用DLL以及matlab指针参数传递.doc

Matlab调用DLL以及matlab指针参数传递

Matlab调用DLL? 本来想把算法写成一个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 __cplusplusextern?"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的帮助文件,我就不罗嗦了。

Matlab与指针

指针是一种比较难以驾驭的工具。像是老郭这样的编程菜鸟使用指针,稍有不慎轻则内存泄漏,重则直接蓝屏,真是杯具。还好老郭喜欢的Java语言一开始就杜绝了指针的使用。Matlab也杜绝了指针,所以大家在网上只能搜到零零星星的介绍。

?? 有一些万不得已非要使用指针的情况,譬如变长数组:老郭有100个矩阵,要分别求他们的奇异值分解,但是这100个矩阵大小不一样,怎么样编写循环呢?这就要用指针了。注意matlab拒绝将指针跟双精度数字混为一谈,所以如果用a来存储这100个矩阵,就要事先清空a,命令是

?? clear a

?? 接下来,写循环命令储存矩阵:

?? a(i)=libpointer('doublePtrPtr',rand(6));

?? 循环的那些for神马的,此处略去。这里'doublePtrPtr'是数据格式,double就是double,一维数组用doublePtr,三维用doublePtrPtrPtr,以此类推。rand(6)是矩阵,下一个循环单位可以写rand(4)都可以。这是储存的步骤,读取的步骤是:

?? get(a(2),'Value')

?? 就返回我们刚才存进去的第2个矩阵。'Value'是浮云,放在那里,不解释。

?? 值得注意的是Matlab的这个机制本来是设计用于跟C等等语言做交互的。我们这里滥用一下。如果您想了解更多,查阅Matlab手册就行。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Unity中使用Matlab生成.dll文件的步骤如下: 1. 首先,确保你的计算机上已经安装了Matlab和Unity。 2. 在Matlab中,编写你需要用于导出的函数代码。确保你的函数输入和输出参数是适用于Unity的数据类型,例如基本数据类型(int,float等)、数组或结构体。 3. 使用Matlab的“mcc”命令将你的Matlab代码编译成可执行文件,并同时生成C源文件。例如,在Matlab命令行中输入: mcc -W lib:MyMatlabLib -T link:lib myMatlabFunction.m 这将生成一个名为“MyMatlabLib”(也可以自定义名称)的文件夹,并包含一个C源文件和其他必需的文件。 4. 打开Unity,在Assets文件夹下创建一个名为“Plugins”的文件夹。 5. 将之前生成的C源文件(通常是形如“MyMatlabLib.c”的文件)复制到“Plugins”文件夹中。 6. 在Unity中创建一个C#脚本,以调用你在Matlab中编写并编译的函数。在脚本中使用[DllImport]来导入.dll文件,并定义需要导入的函数签名。例如: [DllImport("MyMatlabLib")] private static extern int myMatlabFunction(int input1, float input2, ref float output); 7. 在Unity中的任何可执行代码(例如Start或Update方法)中使用刚刚定义的函数。例如: float outputValue = 0.0f; int result = myMatlabFunction(10, 5.0f, ref outputValue); 这将调用你在Matlab中编写的函数,将输入参数(10和5.0)传递给函数,并将计算结果存储在outputValue变量中。 8. 现在,你可以在Unity中使用Matlab函数生成的.dll文件了。 需要注意的是,在使用Matlab生成.dll文件时,确保你的Matlab代码和Unity的项目具有相同的位数和平台(32位或64位)。 另外,还需要注意的是,.dll文件不能直接在移动设备上使用,因为移动设备不支持生成和使用.dll文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值