如何将c ++ dll文件加载到Matlab中

时间:2009-02-19 13:47:11

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

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

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

mex找到linux的东西(平台独立库)并尝试包含它们。这不起作用。

有没有人有什么好主意?

3 个答案:

答案 0 :(得分:4)

loadlibrary应该可行。我一直用它来调用用C包装器用C ++编写的dll函数。

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

确保dll的导出函数是C函数,而不是C ++函数。如果没有,那么写C包装器。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你可以选择Java方法(因为Matlab在JRE上运行并且可以access Java objects/methods - 只要知道Matlab JRE不像最新的JRE那样是最新的,我就是m运行使用Java 1.5)并使用JNA来访问您的DLL。


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

我已经很好地将我的C ++函数接口构建为COM / ActiveX库 - 你不必费心去做那些.h的东西。

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

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


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