C DLL 내보내기: 장식된/엉킨 이름
C DLL 개발에서는 컴파일 후에 내보낸 함수 이름이 장식되지 않은 채로 나타날 것으로 예상됩니다. 그러나 추가 문자로 장식된 함수 이름을 만나면 문제가 발생할 수 있습니다.
장식의 원인
보이는 장식은 컴파일러의 이름 맹글링 프로세스의 결과입니다. C 코드를 컴파일할 때 컴파일러는 오버로드된 함수 또는 다른 컴파일 단위 전체에서 고유성을 보장하기 위해 함수 이름을 수정합니다. 이 맹글링에는 추가 문자와 기호가 포함됩니다.
프라그마 주석을 사용한 솔루션
모듈 정의 파일을 사용하지 않고 장식되지 않은 함수 이름을 내보내려면 pragma 주석을 삽입할 수 있습니다.
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
또는 장식된 함수 이름을 자동으로 얻으려면:
#pragma comment(linker, "/EXPORT:" __FUNCTION__"=" __FUNCDNAME__)
선언 지정자가 있는 동등한 Extern "C"
또 다른 접근 방식 선언 지정자와 함께 extern "C"를 사용하는 것입니다:
extern "C" void __declspec(dllexport) SomeFunction();
그러나 이 방법은 여전히 동일한 장식된 함수 이름을 생성합니다.
접미사 제거
안타깝게도 모듈 정의 파일이나 pragma 주석을 사용하지 않으면 "=" 장식을 제거할 수 없습니다. 이 접미사는 함수의 데코레이팅된 버전을 나타냅니다.
C# 애플리케이션에 대한 해결 방법
데코레이트되지 않은 이름이 선호되지만 C#에서 P/Invoke 호출은 다음을 사용하여 계속 수행할 수 있습니다. 장식된 함수 이름. 이렇게 하려면 함수를 호출할 때 완전히 장식된 이름을 포함하세요.
위 내용은 C DLL에서 내보낸 함수 이름이 때때로 장식되는 이유는 무엇이며 장식되지 않은 이름을 어떻게 내보낼 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!