Вопрос

Когда мы компилируем dll с помощью __stdcall внутри Visual Studio 2008, имена скомпилированных функций внутри dll:

ИмяФункции

Хотя, когда мы компилируем одну и ту же dll с использованием GCC, используя wx-dev-cpp, GCC добавляет количество параметров, которые имеет функция, поэтому имя функции, использующей Dependency Walker, выглядит так.

ИмяФункции@ЧислоПараметров или == ИмяФункции@8

Как сообщить компилятору GCC удалить @nn из экспортированных символов в dll?

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

Решение

__stdcall украшает имя функции, добавляя подчеркивание в начале и количество байтов параметров в конце (разделенные символом @).

Итак, функция:

void __stdcall Foo(int a, int b);

...станет _Foo@8.

Если вы укажете имя функции (без оформления) в разделе EXPORTS вашего файла .DEF, оно будет экспортировано без оформления.

Возможно, в этом и есть разница?

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

Просто используйте -Wl,--kill-at в командной строке gcc, которая пройдет --kill-at к линкеру.

Использованная литература:

Вы также можете использовать -Wl,--add-stdcall-alias к вашим параметрам компоновщика в GCC.Это гарантирует, что оба имени функции (декорированные и недекорированные) присутствуют и могут использоваться в качестве псевдонимов.

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