2013-06-03 1 views
0

DLL을 만들고 .def 파일로 함수 이름을 정의하려고하는데 작동하지 않는 것 같습니다. 나 DLL에 대한 나의 헤더 파일은 다음과 같습니다.DEF로 DLL을 만들어 함수 이름을 정의하십시오.

#ifdef ColorDLL_EXPORTS 
#define ColorDLL_API 
#endif 

int ColorSelect(int i); 

CPP 파일 :

#include "stdafx.h" 
#include "ColorDLL.h" 
#using <ColorDiologeClass.dll> 

int ColorSelect(int i){ 
    ColorDiologeClass::Class1::ColorReturn(1); 
    return 1; 
} 

내가 솔루션 탐색기에서 마우스 오른쪽 버튼을 클릭하여 ColorDLL.def을 추가하고 .DEF 파일은 다음과 같습니다 파일 추가 : 내가 DUMPBIN을 사용하는 경우

LIBRARY "ColorDLL" 

EXPORTS 
    ColorSelect 

은/이름에 대한 결과가

name 
ColorSelect = [email protected]@[email protected] (int __cdec1 ColorSelect(int)) 
입니다 수출 이름이 I는 = 부분을 제거하려면 어떻게해야이

name 
ColorSelect 

처럼 보이는 곳

나는 그것을 본 적 있어요?

답변

1

__declspec(dllexport)을 사용하는 경우, 표시된대로 변형 된 이름이 표시됩니다. .DEF 파일은 전혀 필요하지 않습니다. 첫 번째 파일을 제거하고 다른 결과에 대해서만 def 파일을 사용하십시오.

#if의 두 가지 분기 모두에서 내보내기가 있습니다.

+0

그래서 나는 당신에게'__declspec (dllexport)'을 가져 갔고 나는 여전히 같은 문제를 겪고있다. '=? ColorSelect @@ YAHH @ Z (int __cdec1 ColorSelect (int))'를 어떻게 제거 할 수 있습니까? 또는 동등한 것이 더 나은 무엇입니까? – user1334858

+1

내부적으로 함수 이름이 시작하는 것에 맹 글링됩니다. With =는 동일한 서수에 대한 대체 이름을 나타냅니다. declspec없이 다시 빌드 했습니까? 왜 그런 식으로 .DEF로 번거 로움을하고 싶어? 유용성 만 방해합니다. –

+0

그래, = 그냥 다른 이름이 있음을 의미합니까? 그래, 나는 __declspec (dllexport)없이 리빌드했고 dumpbin을 사용할 때도 같은 결과를 얻었다. 나는 이것을 JMP와 함께 사용하려하고 DLL 내부에 정확한 함수 이름을 주어야하기 때문에 C++이 이름을 꾸미기 때문에 함수 이름을 정의하기 위해 .DEF를 만들어야 만했다. – user1334858

관련 문제