문제

관리되는 코드가있는 관리되지 않는 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 함수에 대한 이름 맨젤 링을 억제 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top