Pregunta

Tengo una DLL, que exporta una función ...

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

Me compilar esto con Code :: Blocks compilador GCC (V3.4.5). Problema: DLL resultante exportaciones decorada nombre de la función ...

MP_GetFactory@4

Esto no se carga, debe ser el viejo y simple ...

MP_GetFactory

He investigado esto durante aproximadamente 4 horas. Creo --add-stdcall-alias es la opción para solucionar este problema. Mis Code :: Blocks registro muestra ...

  

mingw32-g ++ exe -shared -Wl, -. Fuera 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 \ ganancia \ Gain.o obj \ Debug \ ganancia \ gain.res -o bin \ Debug \ GainGCC.sem --add-stdcall-alias -luser32

.. así que creo que es la opción correcta ahí? Pero no hubo suerte. Dependencia Walker mostrar sólo el nombre decorado que se exporta. Lo tengo un poco de trabajo mediante el uso de __cdecl en lugar de __stdcall, el nombre entonces se exporta bien, pero las funciones corrompe la pila cuando se le llama (debido a que la persona que llama espera que la otra convención de llamada).

¿Fue útil?

Solución

Lo sentimos para responder a mi propia pregunta, finalmente lo descubrió.

Opciones de proyecto / construcción / Otras opciones de vinculador / Linker -Wl, - kill-a

... mata la decoración '@' símbolo etc.

Otros consejos

Creo que debe ser -Wl, - complemento stdcall-alias y el "kill-a" trucos a hacer el archivo de biblioteca de importación generada no se puede utilizar

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