2010-03-24 2 views
4

У меня есть длл, он экспортирует функцию ...экспорта GCC декорированные имя функции только из DLL

extern "C" 
int __stdcall 
MP_GetFactory(gmpi::IMpUnknown** returnInterface) 
{ 
} 

компилировать это с Code :: Blocks GCC компилятором (V3.4.5). Проблема: в результате экспорта DLL декорированные имени функции ...

[email protected] 

Это не загружается, должна быть простой старой ...

MP_GetFactory 

Я исследовал это в течение примерно 4 часов. Я думаю, что -add-stdcall-alias - это возможность исправить это. Мой код :: Blocks журнал показывает ...

mingw32-г ++ ех -shared -Wl, -. Из-Implib = Bin \ Debug \ libGainGCC.a -Wl, - длл OBJ \ Debug \ se_sdk3 \ mp_sdk_audio.o obj \ Debug \ se_sdk3 \ mp_sdk_common.o obj \ Debug \ Gain \ Gain.o obj \ Debug \ Gain \ gain.res -o bin \ Debug \ GainGCC.sem --add-stdcall-alias -luser32

.. я думаю, что это правильный вариант? Но не повезло. Dependancy Walker показывает только экспортированное имя. Я получил это для работы с помощью __cdecl вместо __stdcall, тогда имя затем экспортируется в порядке, но функция повреждает стек при вызове (поскольку вызывающий абонент ожидал другого соглашения о вызове).

ответ

5

Извините, что ответили на мой вопрос, в конце концов, поняли это.

Project/Строительные Опции/Linker/Другого компоновщик Параметры -Wl, - убейте-на

... убивает украшение '@' символ и т.д.

1

Я думаю, что это должно быть -Wl , - add-stdcall-alias и трюки «kill-at» заставят сгенерированный файл библиотеки импорта не использоваться.

Смежные вопросы