将 MATLAB 连接到 C 语言 DLL
MATLAB 环境不容易访问常见的 Windows 函数;本文解释了如何通过调用专门开发的 C DLL 库,从 MATLAB 中轻松访问这些函数。
引言
MATLAB 是一个高级编程环境,用于开发专业的数学、算法或科学应用程序。 这种环境在此类开发方面具有许多优势,但访问常见的 Windows 开发功能并不容易。
幸运的是,对于需要在 MATLAB 中使用 Windows 功能的开发人员,有一种简单的方法可以调用它们。 MATLAB 的语言包含一个函数 calllib
,可以从该函数访问外部简单 C DLL 中的代码。
MATLAB 的 calllib 函数
calllib( 'lib_name', 'function_name', arg1....argN )
calllib
函数是 MATLAB 语言中内置的多功能特性,它可以将多个参数传递给外部库。 要使用 calllib
,首先需要使用 loadlibrary
函数打开 DLL 库,稍后需要使用 unloadlibrary
函数关闭它。
loadlibrary('MATLABconnector.dll', 'MATLABconnector.h')
calllib('MATLABconnector', 'fnMATLABconnector', 1)
unloadlibrary('MATLABconnector')
通过将 DLL 及其对应的导入 .h 文件放置在与正在开发的 .m MATLAB 文件相同的目录中,可以简化 loadlibrary
函数;如果它位于其他位置,则对 loadlibrary
的调用必须指定这些文件的确切位置。
calllib 参数
- 参数 1:要调用的库的名称 - 这是 DLL 文件的名称,减去 .dll 结尾。
- 参数 2:DLL 文件中函数的名称(在我们的示例中,这是
fnMATLABconnector
,实际上可以是任何名称)。 - 参数 3 及其他参数:这可以是一个或多个参数,这些参数是传递给我们正在调用的函数的参数(在我们的示例中,这是一个简单的整数)。
C DLL
这是一个简单的 C 语言 DLL,包括一个 DllMain
函数,以及我们将从 MATLAB 调用的函数(或多个函数)。 要从 MATLAB 访问它,必须将其编译并构建为简单的 C 语言 DLL,以便以 MATLAB 可以解释的样式导出函数名称。 (有关名称修饰的更多信息,请参见 http://en.wikipedia.org/wiki/Name_mangling,如果您以前没有听说过这个!)。 可以在此示例 DLL 的附件 zip 文件中找到源代码 - 但是,可以调用从 C DLL 导出的任何函数,因此请尝试使用一些不同的函数。
我们的示例考虑了一个简单的函数来模拟将 WM_KEYDOWN
和 WM_KEYUP
放入 Windows 消息队列中。 这是可以轻松从 C 中完成的任务,但无法从 MATLAB 中完成。 MATLAB 的 calllib
函数中的第三个参数对应于我们的 fnMATLABconnector
代码中的参数,以指定哪个键码将用于发送 WM_KEYDOWN
和 WM_KEYUP
消息 - 在此示例中,我们使用的是左、右、上和下箭头键。
此技术的用途
所附的项目只是一个概念验证,并没有任何实际应用。 要进一步发展,可能需要结合为 DLL 开发更高级的函数,并使用数学推导的参数从 MATLAB 中调用它。 例如,可以使用 C 开发一个控制硬件接口的应用程序,并从 MATLAB 算法中对其进行模拟和驱动。 这是廉价开发和试验机器人控制算法等的绝佳方式。 此技术的唯一真正限制是您可以想象到的 :-)
参考文献
- MATLAB: mathworks.com
Calllib
函数: http://www.mathworks.com/access/helpdesk/help/techdoc/ref/calllib.html- DLL 名称修饰: Wikipedia - 名称修饰
示例文件
附件是此处提到的示例文件,其中包含更详细的注释,并包含一些项目说明。 请随意使用这些代码 - 如果您想注明来源,请链接回我 (Chris Daw)。
历史
- 2006 年 11 月 27 日:首次发布