2014-03-26 3 views
0

나는 함수 DLLEXPORT void* GetBase(HANDLE hProc)을 포함하는 DLL을 만들고 있는데 컴파일 할 때 종속성 워커로 열면 "GetBase"라는 이름의 함수가 없습니다. "GetBase @@ YAPAXPAX @ Z"만 볼 수 있습니다. 이게 뭐가 잘못 됐어? 저는 Visual C++ 2013을 사용하고 있으며이를 릴리스로 컴파일했습니다.DLL의 잘못된 함수 이름

+0

코드를 C++로 작성합니다. 파일 확장명은 .cpp 또는 .c입니까? – cup

+0

파일 확장명은 ".cpp"입니다. –

+1

이것은 완전히 정상입니다. C++ 컴파일러는 함수 이름을 장식합니다 *. 오버로드 된 메소드가 다른 링크 이름을 갖도록 필요합니다. 'extern "C"'를 사용하여 그것을 억제하십시오. 이를 억제하지 마십시오. 함수 선언을 변경하고이를 사용하는 코드를 업데이트하지 않을 때 문제를 피할 수있는 좋은 방법입니다. –

답변

0

함수에 "잘못"이있는 것은 없습니다. 그것은 "맹 글링"되었습니다. 즉, 함수 이름에 컴파일러의 유형 정보를 추가했습니다. 이것은 C++에서 오버로드를 지원하는 방법입니다. 동일한 이름을 가진 함수이지만 다른 매개 변수를 사용하면 함수 이름이 달라집니다.

DLL에 debug info attached이있을 수도 있습니다.이 이름은 다른 이름을 사용할 수도 있습니다.

귀하의 질문에있는 "c"태그는 모두 번거롭기 만합니다. C에는 과부하가 없으므로 이름 맹 글링이 필요하지 않습니다.