GCC экспортирует оформленное имя функции только из dll

У меня есть dll, она экспортирует функцию ...

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

Я компилирую это с помощью компилятора Code :: Blocks GCC (V3.4.5). Проблема: полученная dll экспортирует оформленное имя функции ...

MP_GetFactory@4

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

MP_GetFactory

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

mingw32-g ++. exe -shared -Wl, - out-implib = bin \ Debug \ libGainGCC.a -Wl, - dll 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, имя затем экспортируется нормально, но функция повреждает стек при вызове (потому что вызывающий ожидал другого соглашения о вызовах).


person Jeff McClintock    schedule 24.03.2010    source источник


Ответы (2)


Извините за ответ на свой вопрос, наконец-то разобрался.

Проект / Параметры сборки / Компоновщик / Другие параметры компоновщика -Wl, - kill-at

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

person Jeff McClintock    schedule 24.03.2010

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

person Readon Shaw    schedule 24.04.2014