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 - это возможность исправить это. Мой код:: Журнал блоков показывает...

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, затем имя экспортируется нормально, но функция вызывает стек при вызове (потому что вызывающая сторона ожидала другого соглашения о вызовах).

2 ответа

Решение

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

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

... убивает символ "@" и т.д.

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

Другие вопросы по тегам