Domanda

Spero di caricarelibrary su un DLL C ++ non gestito con il codice gestito, quindi chiamare GetProcAddress sulle funzioni esterne che sono state mangiate.La mia domanda è che sono i nomi mangiati che ottieni da un compilatore C ++ deterministico?Cioè: il nome sarà sempre convertito allo stesso nome manglato, se la firma dell'originale non è cambiata?

È stato utile?

Soluzione

non è specificato dallo standard, ed è certamente cambiato tra le versioni dello stesso compilatore nella mia esperienza, sebbene debba essere deterministica su qualche serie fissa di circostanze, perché altrimenti non ci sarebbe alcun modo di collegarti due separatamenteModuli compilati

Se stai usando GetProcAddress, sarebbe più pulito per esportare le funzioni come extern "C" in modo che i loro nomi non siano mangiati.

Altri suggerimenti

È specifico del compilatore, come hanno detto altri.Tuttavia, è possibile trovare dettagli in un documento di Agner Fog ...

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

.

Vedere la voce 5 su quella pagina.

Inoltre, in questi giorni ci sono biblioteche che possono gestire mangling e demangling per i compilatori comuni per te.Per Visual C ++, il punto di partenza sarebbe le librerie DBGHELP e IMAGEHLP.

http://msdn.microsoft.com / en-noi / biblioteca / ms679292% 28v= vs.85% 29.aspx

http://msdn.microsoft.com / en-noi / libreria / ms680321% 28v= vs.85% 29.aspx

Nome Mangeling viene gestito in modo diverso da ogni compilatore (forse o meno, non ci sono standard).Se si utilizzano le funzioni PURE C nel codice C ++, è possibile utilizzare l'extern "c" per Suprime il nome del nome per le funzioni C in modo che il compilatore sia in grado di trovarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top