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

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

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

myCustomCppFunction('param1', 'param2)

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

Когда я бегу DUMPBIN Команда, я получаю что-то вроде этого:

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

Так,

myCustomCppFunctionWithADifferentName! = myCustomCppFunction

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

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

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

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

какие-нибудь подсказки?

0

Решение

Помимо вашего Я не уверен, что вы имеете дело с 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 таким образом, тогда то, что вы показываете, имеет смысл.

1

Другие решения


По вопросам рекламы [email protected]