【问题标题】:How to load a c++ dll file into Matlab如何将 c++ dll 文件加载到 Matlab 中
【发布时间】:2010-10-08 14:23:20
【问题描述】:

我有一个 C++ dll 文件,它使用了许多其他 c++ 库(IPP、Opencv +++),我需要将它们加载到 matlab 中。我该怎么做?

我尝试过 loadlibrary 和 mex。加载库不起作用。

mex 找到 linux 的东西(独立于平台的库)并尝试包含它们。那是行不通的。

有人有什么好主意吗?

【问题讨论】:

  • 在 C++ 代码周围添加了 C 包装器,这使得 loadlib 函数可以工作。

标签: c++ matlab dll shared-libraries loadlibrary


【解决方案1】:

loadlibrary 应该可以工作。我一直用它来调用用 C++ 和 C 包装器编写的 dll 中的函数。

当您尝试使用 loadlibrary 时遇到什么错误?

确保 dll 的导出函数是 C 函数,而不是 C++ 函数。如果不是,则编写 C 包装器。

详细了解您在使用 loadlibrary 时所做的事情会有所帮助。

【讨论】:

    【解决方案2】:

    正如其他人所说,您应该首先将您的 C++ 库包装为 C 库 - mathworks 曾经建议不要直接在 mex 中使用 C++ 代码(直接 dlopening C++ 内核很复杂),也许它仍然是正确的。

    您的描述也很不清楚:“mex 找到了 linux 的东西”是什么意思,但这不起作用。说它不起作用并没有帮助:确切的命令和错误消息是。

    【讨论】:

      【解决方案3】:

      您可以选择 Java 方法(因为 Matlab 在 JRE 上运行并且可以access Java objects/methods - 请注意,Matlab JRE 不像我正在运行的最新 JRE 那样最新使用 Java 1.5) 并使用 JNA 访问您的 DLL。


      或者,如果您编写了顶级 DLL,则可以采用 COM/ActiveX 方法。

      我已经成功地将我的 C++ 函数的接口构建为 COM/ActiveX 库——您不必为那些 .h 的东西而烦恼。

      参见External Interfaces COM 客户端指南,尤其是关于managing/converting 数据的部分。

      添加 COM/ActiveX 层将是额外的工作,但会使您的库在 Windows 世界中更便携,并且可能更容易在 MATLAB 中使用。


      如果您的 DLL 有很多函数调用,COM/ActiveX 方法可能会更快(不确定),但否则我认为 JNA 方法会更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-04
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-27
        相关资源
        最近更新 更多