C ++ Name Mangling (Decoration) 결정 니즘입니까?
-
16-09-2020 - |
문제
관리되는 코드가있는 관리되지 않는 C ++ DLL에서 LoadLibrary를 사용하고 in extern 함수에서 getProcAddress를 호출합니다.내 질문은 C ++ 컴파일러 결정 론적으로 얻은 맹그래스 이름입니까?즉, 원래의 서명이 변경되지 않은 경우 항상 동일한 mangled 이름으로 변환하여 이름을 지정합니까?
해결책
표준에 의해 지정되지 않았으며, 고정 된 상황 세트에 따라 결정적이지 않아도 동일한 컴파일러에서 동일한 컴파일러의 버전간에 변경되었습니다.컴파일 된 모듈.
GetProcAddress
를 사용하는 경우, 기능을 extern "C"
로 내보내는 것이 멀리 정리 될 수 있으므로 이름이 jamled가 아닙니다.
다른 팁
다른 사람들이 말한 것처럼 컴파일러 구체적입니다.그러나 Agner Fog가 문서에서 자세한 내용을 찾을 수 있습니다 ...
http://www.agner.org/optimize/#manuals P>
해당 페이지에서 항목 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
이름 맨젤 링은 모든 컴파일러 (어쩌면 또는 아닌 표준이 없음)가 다르게 처리됩니다.C ++ 코드에서 순수한 C 기능을 사용하는 경우 extern "C"를 사용하여 컴파일러가 찾을 수 있도록 C 함수에 대한 이름 맨젤 링을 억제 할 수 있습니다.