> 백엔드 개발 > C++ > 본문

C DLL 함수를 내보내고 이름이 변경되거나 변조되는 것을 방지하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-11-13 03:25:02
원래의
642명이 탐색했습니다.

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

C DLL 내보내기: 장식되거나 변조된 이름 이해

C DLL을 만들고 해당 기능을 내보내는 것은 일반적인 작업입니다. 그러나 내보낸 이름이 표시되는 방식을 결정하는 것은 혼란스러울 수 있습니다.

장식된/잘못된 이름

모듈 정의 파일(MyDLL.def)을 사용하여 함수를 내보낼 때 " SomeFunction@@@23mangledstuff#@@@@". 이는 C 컴파일러가 C 런타임에 필요한 정보를 추가하여 함수 기호를 장식하기 때문에 발생합니다.

C 스타일 내보내기 사용

extern "C" __declspec(dllexport) 구문을 사용하여 함수를 내보내면 장식된 이름을 제거하지 마세요. 함수에 C 스타일 이름이 있어야 한다고 명시하고 장식은 그대로 유지됩니다.

해결책

문제를 완화하려면 pragma 지시어 사용을 고려하세요.

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
로그인 후 복사

이 pragma는 지정된 데코레이팅된 이름으로 "SomeFunction"을 내보내도록 링커에 지시합니다.

대체 솔루션

또는 함수 본문 내에서 다음 pragma를 사용할 수 있습니다.

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
로그인 후 복사

이 pragma는 FUNCTIONFUNCDNAME 매크로를 사용하여 함수 이름과 장식된 이름을 자동으로 검색합니다.

이 pragma를 사용하면 장식을 제어할 수 있습니다. 내보낸 기호를 사용하여 C#과 같은 다른 언어에서 호출할 때 호환성을 보장합니다.

위 내용은 C DLL 함수를 내보내고 이름이 변경되거나 변조되는 것을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿