2011-09-23 3 views
1

MSVC (특히 2010 버전)에 DLL을 쓸 때 약간의 문제가 있습니다. 내 프로그램은 주요 부분과 DLL로 구성됩니다. DLL이 파일은 DLL 프로젝트를 사용하여 컴파일MSVC : __declspec (dllexport)는 기호가 아닙니다.

__declspec(dllexport) int test_function(void) { 
    return 42; 
} 

수있는 기능이 포함되어 있습니다 (미리 컴파일 된 헤더를 사용하지, 나는 빈 DLL 프로젝트를 선택했습니다). 이제 dumpbin 도구를 사용하여 내 보낸 심볼을 나열하려면 test_function이 내보내기 아래에 나열되지 않습니다. __declspec(dllexport)이 심볼을 실제로 내보내도록하는 특정 설정이 있습니까?

어떤 도움을 환영합니다. 고맙습니다!

+1

내보낼 수 없습니까? dumpbin의 출력은 얼마입니까? – Bahbar

+1

"/ exports 옵션 사용을 잊어 버렸습니다."라는 문구를 넣을 것입니다. 에 니켈은 "맹 글링 된 이름을 인식하지 못합니다". –

답변

1

그렇게해야합니다. 이것이 전체 코드 인 경우 다음을 확인하십시오.

1) 올바른 dll을 실제로 확인하고 있습니다. 타임 스탬프를 봐. 위치와 이름을 다시 확인하십시오.

2) 지정한 cpp를 컴파일 중입니다 (사용자 정의가 cpp 파일에 있습니다). 파일이 디렉토리에 있기 때문에 컴파일 된 것을 의미하지는 않습니다. 프로젝트에 추가되었는지 확인하십시오.

3) 함수가 전처리 기 지시문에 의해 컴파일 유닛에서 제외되어 있지 않은지 확인하십시오.

또한 다른 기호를 찾아 내보내는 기호와 사용자의 기능간에 어떤 차이가 있는지 확인하십시오.

실패한 경우 __declspec(dllexport).h 파일로 이동하고 정의 (__declspec(dllexport) 제외)를 .cpp으로 옮겨야합니다. 컴파일러가 인라이닝하여 최적화 할 수 있기 때문에 내보낼 수 없습니다.