왜 Extern "C"가 다음과 같은 경우에 이름 샘글링을 여전히 제거 할 수 없습니까?

StackOverflow https://stackoverflow.com/questions/5448483

문제

extern "C"
{
__declspec(dllexport) LRESULT CALLBACK MTest
}
.

DESEDS를 사용하면 extern "C"를 사용하는 이름의 삽입이 아직 없음을 발견했습니다.

도움이 되었습니까?

해결책

__declspec (DLLEXPORT)로 진정한 어려하지 않은 이름을 얻는 유일한 방법은 __cdecl 호출 규칙을 사용하여이를 내보내는 것입니다.콜백은 __stdcall이됩니다.

그렇지 않으면 .def 파일을 사용할 수 있습니다.또 다른 MSVC 특정 방식은 / 내보내기 객체 파일에 지시문 (또는 명시 적 링커 설정으로 전달)

#pragma comment(linker, "/EXPORT:ExportSymbol=DecoratedName");
.

어떤 이유로 지시문의 = 부분이 도움말 에 나열되지 않습니다.

다른 팁

그것은 맹글링보다는 이름 장식입니다.DEF 파일에서 변경되지 않은 이름을 선언 한 다음 찾는 동작을 얻어야합니다.

시각적 인 C ++ 프로그래머의별로 나에게 발생하는 첫 번째 생각은 ... "이 매크로 LRESULT 또는 콜백 중 하나는 표준 호출 협약을 소개합니까?"Mangled 이름에는 @number_of_bytes_of_paramater_list 또는 해당 유형이 추가 된 실제 유형을 묘사 한 문자가 있습니까?

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