不同于导出的 DLL 函数名称

DLL function name different from exported

我正在使用其他人使用 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 中,我还 运行 which 命令向我确认调用的函数来自我正在调查的 DLL....

>> which myCustomCppFunctionWithADifferentName
>> c:/myCustomCpp.dll

有什么线索吗?

除了你的 标签,我不确定你处理的是 MEX 文件。

MEX 文件(DLL)的名称与导出函数的名称无关。 MEX 文件中导出的函数是:

mexFunction

在Windows中还有一个DLLMain,但是MATLAB寻找mexFunction.

事情是这样的:

>> myMEXFunction()  % looks for myMEXFunction.mexw64 (or whatever extension)

如果 myMEXFunction.mexw64 已 mexFunction 导出,则说明您在做生意。

请注意 mexFunctionmex.h 中被 声明为 extern "C"(如果您正在编译 .cpp),您只需 在您的源代码中定义它。所以它永远是未修饰的。

但是,您的 myCustomCpp.dll 不导出 mexFunction,所以您可能不是在谈论 MEX 文件?此外,如果您在谈论 MEX 文件,让我更加不确定的是您使用 which 得到的奇怪结果。您的 MATLAB 源代码 (myCustomCppFunction) 是否实际使用 loadlibrarycalllib 来操作 DLL?如果 myCustomCppFunction() 以这种方式加载了一个非 MEX DLL,那么您显示的内容就有意义了。