Имя C++ искажает детерминированное (художественное оформление)?

Я надеюсь к LoadLibrary на неуправляемом C++ DLL с управляемым кодом и затем называю GetProcAddress на функциях экстерна, которые были искажены. Мой вопрос, скорректированные имена, которые Вы получаете из детерминированного компилятора C++? Это: Будет имя всегда преобразованным в то же скорректированное имя, если подпись оригинала не изменилась?

6
задан agf 29 September 2011 в 14:43
поделиться

3 ответа

Он не определен стандартом и определенно изменился между версиями одного и того же компилятора в мой опыт, хотя он должен быть детерминированным по некоторому фиксированному набору обстоятельств, потому что в противном случае не было бы возможности связать два отдельно скомпилированных модуля.

Если вы используете GetProcAddress , это было бы далеко Очиститель для экспорта функций как extern «C» , чтобы их имена не искажались.

6
ответ дан 16 December 2019 в 21:33
поделиться

Манифестация имен обрабатывается каждым компилятором по-разному (возможно или нет - стандарта нет). Если вы используете чистые функции языка C в коде на C++, вы можете использовать extern "C", чтобы подавить маскировку имен для функций языка C, чтобы компилятор мог их найти.

0
ответ дан 16 December 2019 в 21:33
поделиться

Это зависит от компилятора, как говорили другие. Однако вы можете найти подробности в документе Агнера Фога ...

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

2
ответ дан 16 December 2019 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: