Pergunta

Espero LoadLibrary em uma DLL C++ não gerenciada com código gerenciado e, em seguida, chamar GetProcAddress em funções externas que foram mutiladas.Minha pergunta é: os nomes distorcidos que você obtém de um compilador C++ são determinísticos?Aquilo é:O nome será sempre convertido para o mesmo nome mutilado, se a assinatura do original não tiver mudado?

Foi útil?

Solução

Não é especificado pelo padrão e certamente mudou entre versões do mesmo compilador na minha experiência, embora deva ser determinístico em relação a algum conjunto fixo de circunstâncias, porque caso contrário não haveria como vincular dois módulos compilados separadamente.

Se você estiver usando GetProcAddress, seria muito mais limpo exportar as funções como extern "C" então seus nomes não são mutilados.

Outras dicas

É compilador específico, como outros disseram.No entanto, você pode encontrar detalhes em um documento por agner nevoeiro ...

http://www.agner.org/optimize/#manuals

.

ver item 5 nessa página.

Além disso, estes dias, há bibliotecas que podem lidar com mutegas e desmantelantes para compiladores comuns para você.Para o Visual C ++, o ponto de partida seria as bibliotecas DBGHELP e ImageHlp.

http://msdn.microsoft.com / pt-us / biblioteca / MS679292% 28V= vs.85% 29.aspx

http://msdn.microsoft.com / pt-us / biblioteca / MS680321% 28V= vs.85% 29.aspx

Nome Mangeling é tratado de forma diferente por cada compilador (talvez ou não - não há padrão).Se você usar funções C puras no código C ++, poderá usar o externo "C" para suprimir o mangeling para as funções C para que o compilador seja capaz de encontrá-los.

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