我有一个C ++ dll文件,它使用了许多其他c ++库(IPP,Opencv +++),我需要将其加载到matlab中。我怎么能这样做?
我尝试过loadlibrary和mex。加载库不起作用。
mex找到linux的东西(平台独立库)并尝试包含它们。这不起作用。
有没有人有什么好主意?
答案 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方法会更容易。