Имя функции DLL отличается от экспортированного

Я использую программу, разработанную кем-то другим с использованием С++ и Matlab. У меня есть исходный код обоих, но я не знаю, что происходит...

Matlab вызывает dll, сгенерированную из С++, используя что-то вроде этого:

myCustomCppFunction('param1', 'param2)

Я ожидал увидеть myCustomCppFunction в экспорте dll, но не смог его найти.

Когда я запускаю команду dumpbin, я получаю что-то вроде этого:

dumpbin /exports c:/myCustomCpp.dll
ordinal hint RVA      name
1    0 00001010 myCustomCppFunctionWithADifferentName

So,

myCustomCppFunctionWithADDifferentName != myCustomCppFunction

DLL экспортирует имя функции, которое отличается от имени функции, которое вызывает мой Matlab. И я не говорю о искаженных именах, оба имени на 100% разные, как «яблоко» и «банан». :-)

Почему-то все работает нормально! но как?!?

В Matlab я также запустил команду what, которая подтвердила мне, что вызываемая функция происходит из библиотеки DLL, которую я исследую....

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

любые подсказки?


person guilhermecgs    schedule 16.07.2015    source источник
comment
Не могли бы вы указать настоящие имена, имя вашей функции и имя в DLL?   -  person Some programmer dude    schedule 16.07.2015
comment
имя_функции, отображаемое в dumpbin: carWalk Имя_функции, которое вызывает Matlab: iterateOverRoad Имя DLL: iterateOverRoad   -  person guilhermecgs    schedule 16.07.2015
comment
у DLL есть точка входа? Имеет ли это смысл?   -  person guilhermecgs    schedule 16.07.2015
comment
Да, библиотеки DLL имеют основной функцию.   -  person Some programmer dude    schedule 16.07.2015


Ответы (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" (если вы компилируете .cpp), вы просто определяете его в исходном коде. Так что он всегда будет без украшений.

Однако ваш myCustomCpp.dll не экспортирует mexFunction, так что, возможно, вы говорите не о файле MEX? Кроме того, что делает меня более неуверенным, если вы говорите о файле MEX, так это странный результат, который вы получаете с which. Использует ли ваш исходный код MATLAB (myCustomCppFunction) loadlibrary или calllib для работы с DLL? Если myCustomCppFunction() таким образом загрузил не-MEX DLL, то то, что вы показываете, имеет смысл.

person chappjc    schedule 20.07.2015