7

我有一个 C++ dll 文件,它使用了许多需要加载到 matlab 中的其他 c++ 库(IPP、Opencv +++)。我怎样才能做到这一点?

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

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

有没有人有什么好主意?

4

3 回答 3

4

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

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

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

有关您在使用 loadlibrary 时正在做什么的更多信息会很有帮助。

于 2009-02-19T17:37:07.967 回答
1

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

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

于 2009-02-19T17:49:30.800 回答
0

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


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

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

请参阅 COM 客户端的外部接口指南,尤其是有关管理/转换数据的部分。

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


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

于 2009-02-19T14:17:56.240 回答