2015-07-16 7 views
0

Я использую программу, разработанную кем-то другим с использованием C++ и matlab. У меня есть исходный код обоих, но я не знаю, что происходит ...Имя функции DLL, отличное от экспортированного

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 I'm следственному ....

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

любые ключи?

+0

Не могли бы вы назвать * актуальные * имена, имя вашей функции и имя в DLL? –

+0

functionName как показано в dumpbin: «carWalk» functionName, которое Matlab вызывает: «iterateOverRoad» Имя DLL: «iterateOverRoad» – guilhermecgs

+0

У DLL есть «точка входа»? Имеет ли это смысл? – guilhermecgs

ответ

1

Помимо тэга , я не уверен, что вы имеете дело с файлом MEX.

Имя файла MEX (DLL) не связано с именем экспортируемой функции. Экспортируемая функция в файле МЕХ является:

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 таким образом, то то, что вы показываете, имеет смысл.

+0

безупречный ответ! – guilhermecgs