不同于导出的 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 文件。
MEX 文件(DLL)的名称与导出函数的名称无关。 MEX 文件中导出的函数是:
mexFunction
在Windows中还有一个DLLMain
,但是MATLAB寻找mexFunction
.
事情是这样的:
>> myMEXFunction() % looks for myMEXFunction.mexw64 (or whatever extension)
如果 myMEXFunction.mexw64 已 mexFunction
导出,则说明您在做生意。
请注意 mexFunction
在 mex.h
中被 声明为 为 extern "C"
(如果您正在编译 .cpp),您只需 在您的源代码中定义它。所以它永远是未修饰的。
但是,您的 myCustomCpp.dll 不导出 mexFunction
,所以您可能不是在谈论 MEX 文件?此外,如果您在谈论 MEX 文件,让我更加不确定的是您使用 which
得到的奇怪结果。您的 MATLAB 源代码 (myCustomCppFunction
) 是否实际使用 loadlibrary
或 calllib
来操作 DLL?如果 myCustomCppFunction()
以这种方式加载了一个非 MEX DLL,那么您显示的内容就有意义了。
我正在使用其他人使用 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 文件。
MEX 文件(DLL)的名称与导出函数的名称无关。 MEX 文件中导出的函数是:
mexFunction
在Windows中还有一个DLLMain
,但是MATLAB寻找mexFunction
.
事情是这样的:
>> myMEXFunction() % looks for myMEXFunction.mexw64 (or whatever extension)
如果 myMEXFunction.mexw64 已 mexFunction
导出,则说明您在做生意。
请注意 mexFunction
在 mex.h
中被 声明为 为 extern "C"
(如果您正在编译 .cpp),您只需 在您的源代码中定义它。所以它永远是未修饰的。
但是,您的 myCustomCpp.dll 不导出 mexFunction
,所以您可能不是在谈论 MEX 文件?此外,如果您在谈论 MEX 文件,让我更加不确定的是您使用 which
得到的奇怪结果。您的 MATLAB 源代码 (myCustomCppFunction
) 是否实际使用 loadlibrary
或 calllib
来操作 DLL?如果 myCustomCppFunction()
以这种方式加载了一个非 MEX DLL,那么您显示的内容就有意义了。