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