C DLL을 만들고 해당 기능을 내보내는 것은 일반적인 작업입니다. 그러나 내보낸 이름이 표시되는 방식을 결정하는 것은 혼란스러울 수 있습니다.
모듈 정의 파일(MyDLL.def)을 사용하여 함수를 내보낼 때 " SomeFunction@@@23mangledstuff#@@@@". 이는 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는 FUNCTION 및 FUNCDNAME 매크로를 사용하여 함수 이름과 장식된 이름을 자동으로 검색합니다.
이 pragma를 사용하면 장식을 제어할 수 있습니다. 내보낸 기호를 사용하여 C#과 같은 다른 언어에서 호출할 때 호환성을 보장합니다.
위 내용은 C DLL 함수를 내보내고 이름이 변경되거나 변조되는 것을 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!