Pregunta

Cuando compilamos un dll usando __stdcall dentro de Visual Studio 2008, los nombres de las funciones compiladas dentro del dll son.

Nombre de la función

Sin embargo, cuando compilamos el mismo dll usando GCC usando wx-dev-cpp, GCC agrega la cantidad de parámetros que tiene la función, por lo que se ve el nombre de la función que usa Dependency Walker.

NombreFunción@númeroDeParámetros o == NombreFunción@8

¿Cómo le dice al compilador GCC que elimine @nn de los símbolos exportados en el dll?

¿Fue útil?

Solución

__stdcall decora el nombre de la función agregando un guión bajo al inicio y el número de bytes de parámetros al final (separados por @).

Entonces, una función:

void __stdcall Foo(int a, int b);

...se convertiría en _Foo@8.

Si incluye el nombre de la función (sin decorar) en la sección EXPORTACIONES de su archivo .DEF, se exporta sin decorar.

¿Quizás esta sea la diferencia?

Otros consejos

Solo usa -Wl,--kill-at en la línea de comando gcc, que pasará --kill-at al enlazador.

Referencias:

También puedes usar -Wl,--add-stdcall-alias a sus opciones de enlazador en GCC.Esto garantizará que ambos nombres de funciones (decorados y no decorados) estén presentes y puedan usarse como alias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top