Pergunta

Eu tenho uma dll, ele exporta uma função...

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

Eu compilar este com o Code::Blocks compilador GCC (V3.4.5).Problema:resultante dll exporta nome da função decorados...

MP_GetFactory@4

Esta falha ao carregar, deve ser puro e simples...

MP_GetFactory

Eu pesquisei isso por cerca de 4 horas.Eu acho que --add-stdcall-alias é a opção para corrigir isso.O meu Código::Blocos de log mostra...

mingw32-g++.exe -shared-Wl,--out-implib=bin\Debug\libGainGCC.um -Wl,--dll obj\Debug\se_sdk3\mp_sdk_audio.o obj\Debug\se_sdk3\mp_sdk_common.o obj\Debug\Ganhar\o Ganho.o obj\Debug\Ganhar\o ganho.res -o bin\Debug\GainGCC.sem --add-stdcall-alias -luser32

..então eu acho que essa é a opção correta aí?Mas sem sorte.Dependências Walker mostrar apenas o nome decorado a ser exportado.Eu tenho meio que trabalho utilizando __cdecl em vez de __stdcall, o nome é exportados, em seguida, ok, mas a função corrompe a pilha quando chamado (porque o chamador espera a outra convenção de chamada).

Foi útil?

Solução

Desculpe responder a minha própria pergunta, finalmente descobri.

Projeto/Opções De Compilação/Linker/Outras Opções De Vinculador -Wl,--matam-no

...mata a decoração do símbolo'@', etc.

Outras dicas

Eu acho que deveria ser -Wl,--add-stdcall-alias e o "matem-no" truques vai fazer gerado o arquivo de biblioteca de importação não utilizável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top