我有一个 C++ dll 文件,它使用了许多需要加载到 matlab 中的其他 c++ 库(IPP、Opencv +++)。我怎样才能做到这一点?
我试过loadlibrary和mex。加载库不起作用。
mex 找到 linux 的东西(独立于平台的库)并尝试包含它们。那是行不通的。
有没有人有什么好主意?
我有一个 C++ dll 文件,它使用了许多需要加载到 matlab 中的其他 c++ 库(IPP、Opencv +++)。我怎样才能做到这一点?
我试过loadlibrary和mex。加载库不起作用。
mex 找到 linux 的东西(独立于平台的库)并尝试包含它们。那是行不通的。
有没有人有什么好主意?
loadlibrary 应该可以工作。我一直使用它来调用用 C++ 编写的带有 C 包装器的 dll 中的函数。
当您尝试使用 loadlibrary 时遇到什么错误?
确保 dll 的导出函数是 C 函数,而不是 C++ 函数。如果不是,则编写 C 包装器。
有关您在使用 loadlibrary 时正在做什么的更多信息会很有帮助。
正如其他人所提到的,您应该首先将您的 C++ 库包装为 C 库 - mathworks 曾经建议不要直接在 mex 中使用 C++ 代码(直接 dlopening C++ 核心很复杂),也许它仍然是正确的。
您的描述也很不清楚:“mex 找到了 linux 的东西”是什么意思,但这不起作用。说它不起作用是没有帮助的:确切的命令和错误消息是。
您可以选择 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 方法会更容易。