Вопрос

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

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

Я составляю это с Code :: Blocks GCC Compiler (v3.4.5). Проблема: Получающееся в результате экспорта DLL украшенные функции Имя ...

MP_GetFactory@4

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

MP_GetFactory

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

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 debj Gain gain.o obj debug gain gain.res -o bin debug gaingcc.sem -add -stdcall -alias -luser32

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

Это было полезно?

Решение

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

Параметры проекта/сборки/линкеров/другие варианты линкера -WL,-kill-at

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

Другие советы

Я думаю, что это должно быть -WL,-Add-STDCALL-ALIAS, и трюки «Убийства» сделают сгенерированный файл библиотеки импорта невозможным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top