我正在使用由其他人使用c ++和matlab开发的程序。我有两者的源代码,但我不知道发生了什么......
Matlab使用以下内容调用从c ++生成的dll:
myCustomCppFunction('param1', 'param2)
我希望在dll导出中看到 myCustomCppFunction ,但我找不到它。
当我运行 dumpbin 命令时,我收到类似这样的内容:
dumpbin /exports c:/myCustomCpp.dll
ordinal hint RVA name
1 0 00001010 myCustomCppFunctionWithADifferentName
所以,
myCustomCppFunctionWithADifferentName!= myCustomCppFunction
DLL导出的函数名称与我的matlab调用的函数名称不同。而且我不是在谈论受损的名字,两个名字都是100%不同,比如'apple'和'banana'。 : - )
不知何故,一切正常!但是如何?!?
在Matlab中,我还运行了哪个命令,向我确认调用的函数来自我正在调查的DLL ......
>> which myCustomCppFunctionWithADifferentName
>> c:/myCustomCpp.dll
任何线索?
答案 0 :(得分:1)
除了您的mex标记外,我不确定您是否处理过MEX文件。
MEX文件(DLL)的名称与导出函数的名称无关。 MEX文件中的导出函数是:
mexFunction
在Windows中,仍有DLLMain
,但 MATLAB会查找mexFunction
。
所以这就是:
>> myMEXFunction() % looks for myMEXFunction.mexw64 (or whatever extension)
如果myMEXFunction.mexw64导出了mexFunction
,那么您就可以了。
请注意,mexFunction
中mex.h
在extern "C"
中声明为<{1}}(如果您正在编译.cpp),您只需 define 它在你的来源。所以它永远都是未修饰的。
但是,你的myCustomCpp.dll不会导出mexFunction
,所以也许你不是在谈论MEX文件?另外,如果您正在谈论MEX文件,那么让我更加不确定的是which
带来的奇怪结果。您的MATLAB源代码(myCustomCppFunction
)是否实际使用loadlibrary
或calllib
来操作DLL?如果myCustomCppFunction()
以这种方式加载非MEX DLL,那么你所展示的内容是有意义的。