Я надеюсь к LoadLibrary на неуправляемом C++ DLL с управляемым кодом и затем называю GetProcAddress на функциях экстерна, которые были искажены. Мой вопрос, скорректированные имена, которые Вы получаете из детерминированного компилятора C++? Это: Будет имя всегда преобразованным в то же скорректированное имя, если подпись оригинала не изменилась?
Он не определен стандартом и определенно изменился между версиями одного и того же компилятора в мой опыт, хотя он должен быть детерминированным по некоторому фиксированному набору обстоятельств, потому что в противном случае не было бы возможности связать два отдельно скомпилированных модуля.
Если вы используете GetProcAddress
, это было бы далеко Очиститель для экспорта функций как extern «C»
, чтобы их имена не искажались.
Манифестация имен обрабатывается каждым компилятором по-разному (возможно или нет - стандарта нет). Если вы используете чистые функции языка C в коде на C++, вы можете использовать extern "C", чтобы подавить маскировку имен для функций языка C, чтобы компилятор мог их найти.
Это зависит от компилятора, как говорили другие. Однако вы можете найти подробности в документе Агнера Фога ...
http://www.agner.org/optimize/#manuals
См. Пункт 5 на этой странице.
Кроме того, в наши дни существуют библиотеки, которые могут обрабатывать искажения и разборки общих компиляторов за вас. Для Visual C ++ отправной точкой будут библиотеки dbghelp и imagehlp.
http://msdn.microsoft.com/en-us/library/ms679292%28v=VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms680321 % 28v = VS.85% 29.aspx