2014-01-11 1 views
0

내가 C++ 7.1C++ 7.1 이름 변환을 해제하는 방법? :(

내가 지금뿐만 아니라 VS2003에서 컴파일 할 필요가 VS 2010에서 컴파일 관리 VS 2003 년에 작성된 라이브러리 코드를 가지고있다.

문제는 내가 VS2003 이름 맹 글링을 막을 수 없다!

을 나는 __stdcall 함수 이름 앞에 __declspec (dllexport)를 사용하고 나 또한 통근 "C"블록에 코드를 넣어.

을 난 아직도 망가 함수 이름을 얻을 내가 그것을 컴파일 할 때 VS 20003. .def 파일이 필요 없다. __declspec (dllexport)를 사용 하시겠습니까? 내가 망가 함수 이름을 얻을 왜

extern "C" 
{ 

    void __declspec(dllexport) __stdcall FreeMyObject(MyObjectHandle pObj) 
    { 
    delete pObj; 
    } 
} 

는 또한 "전화도 협약"__cdecl (/ 하나님)입니다

:

희는 코드? 컴파일러 옵션에서 설정해야 할 옵션이 있습니까?

+1

stdcall 장식 인 _FreeMyObject @ 4로 장식됩니다. C++ 이름 맹 글링과 같은 것은 아닙니다. C와 호환되지 않습니다. 이름을 바꾸려면 .def 파일을 사용해야합니다. –

+0

고마워요, 그것이 stdcall 때문에 그것의 것 같아요. 그래서 컴파일러는 VS2010에서 다르게 동작합니까? 왜냐하면 def 파일을 사용하지 않아도 작동하기 때문입니다. 방법에 의해 대답 주셔서 감사합니다 :) – QProgrammer

+1

그것은 매우, 아주 오랫동안 이런 식으로되어 왔습니다. VS2010과 다른 점은 없습니다. 유일한 합리적인 추측은 VS2010 프로젝트에서 64 비트 코드를 작성한다는 것입니다. 어느 쪽이 이름 장식을 필요로하지 않는지, 단 하나의 호출 규칙이 있습니다. 당신은 추측 할 다른 것을 남겨 두지 않습니다. –

답변

1

키워드 _stdcall_cdecl, _thiscall 및 기타와 함께 컴파일러가 인수와 반환 값을 푸시하고 팝하는 방법을 지정하는 모든 호출 규칙입니다. _stdcall로 만든 함수 이름 (적어도 Visual Studio에서는)을 내보낼 때 "데코 레이팅"됩니다. 내 보낸 함수의 이름을 찾으려면 Visual Studio 명령 줄 함수 DUMPBIN /EXPORTS "DLL file location"을 사용할 수 있습니다. 함수 이름은 [email protected](some number)과 비슷할 것입니다. 또한 .def 파일을 사용하여 이름을 직접 정의 할 수도 있지만 개인적으로는 고통이라고 생각합니다.