将MATLAB链接到DLL库

Cap*_*rog 5 dll matlab

我试图从MATLAB工具包' oscmex ' 执行一些示例代码.该工具包允许使用OSC协议通过MATLAB进行通信.我认为这个问题不具体; 它应该适用于以这种方式设置的任何工具包.

抛开原因,我在启动和运行工具包时遇到了一些麻烦.该工具包没有任何文档; 只有一组六个DLL文件(在一个目录中),以及一组四个MATLAB'.m'示例代码文件(在另一个目录中).我过去使用的每个工具包都是内置工具包或者具有直观(半自动)安装过程.

下载工具包后,我尝试的第一件事就是简单地运行一个'.M'示例代码.这失败了,因为代码的第一行包含函数osc(),它没有(当前)被MATLAB识别.

所以,我想我可能需要将'.M'文件移动到与DLL相同的文件夹中; 也许MATLAB会看到DLL中的函数.没有骰子.

所以,我意识到我必须以某种方式在启动时将MATLAB链接到DLL.我尝试将DLL添加到文件夹并在'pathdef.m'文件中添加一个条目.这也失败了.

我已经读过一些可以使用loadlibrary()函数加载DLL文件的地方.所以,我试着为DLL文件做这个.第一个文件失败:

>> loadlibrary('osc_free_address.dll')

Error using loadlibrary>lFullPath (line 587)
Could not find file osc_free_address.h.
Run Code Online (Sandbox Code Playgroud)

我开始耗尽选项......我怎样才能启动并运行这组DLL?

Sha*_*hai 1

浏览这个库的网页,这些 DLL 似乎只是旧形式mex文件。
因此,它们应该在共享库的上下文中使用(例如,使用loadlibrarycalllib),而应该直接编译为 mex 文件。

为此,我建议采取以下步骤:

  1. 确保您有一个为您的 Matlab 配置的工作 mex 编译器。
    在 matlab 中输入:

    >> mex -setup
    
    Run Code Online (Sandbox Code Playgroud)

    这将指导您完成配置过程。我知道你在 Windows 机器上工作,我通常使用 Visual Studio 编译器 - 最适合我。

  2. 该库的自述文件表明 OSC

    需要 liblo 0.22 或更高版本。请参阅http://plugin.org.uk/liblo/

    确保您有这个库并且它位于您体内LD_LIBRARY_PATH(例如,请参阅此问题以了解详细信息,或mex 文档)。

  3. 从他们的存储库获取OSC 库的代码。

  4. 使用以下命令在 matlab 中编译源代码

    >> mex -O -largeArrayDims osc_free_address.c
    >> mex -O -largeArrayDims osc_free_server.c
    
    Run Code Online (Sandbox Code Playgroud)

    对于所有 7 个 c 源文件,依此类推。对 c 文件进行 mex 处理后,您将获得可以从 Matlab 运行的 mex 文件,就像它们是常规函数一样。您可能会发现按照 Andrew Mao 的建议
    使用库的 make 文件很有用。

祝你好运,