2012-03-30 3 views
1

__declspec (dllexport)을 사용하여 내 DLL에서 함수를 내보내려고했지만 작동하지 않습니다. 주 앱에서 GetProcAddress를 실행하면 "지정한 모듈을 찾을 수 없습니다"라는 메시지가 항상 표시됩니다.DLL 내보내기 __declspec (dllexport)이 작동하지 않습니다.

그러나 .def 파일로 함수를 내보내는 경우. 그것은 아주 잘 작동합니다.

이 문제를 해결하는 데 도움을 줄 수 있습니까? .def 파일 대신 __declspec (dllexport)를 사용하고 싶습니다.

대단히 감사합니다. (Visual C++ 2005, MFC를 사용 중입니다.)

답변

2

가 지정된 모듈을 잘못된 오류 메시지입니다

를 찾을 수 없습니다, 당신은 단지 얻을 것이다을 LoadLibrary가 실패 할 때. 일반적으로 잘못된 파일 이름을 사용하고 있기 때문입니다. GetProcAddress() 오류 127, "지정한 프로 시저를 찾을 수 없습니다"실패합니다.

실제로 내 보낸 함수 이름이라고 가정하면 __declspec (dllexport)로 함수의 이름을 바꿀 수있는 옵션이 많지 않습니다. extern "C" 만 C++ 이름 맹 글링을 억제 할 수 있습니다. 이름이 __stdcall로 선언 된 경우 내 보낸 이름의 이름 앞에 @n이 있으며 이름 뒤에 밑줄이 계속 표시됩니다. 완전히 장식되지 않은 내보내기는 64 비트 코드에서만 또는 .def 파일을 사용하여 가능합니다.

실제 이름을 보려면 DLL에서 dumpbin.exe/exports를 사용하십시오. .pdb 파일을 먼저 삭제하면 더 나은 덤프를 얻을 수 있습니다. Depends.exe도 좋습니다.

+0

감사합니다. extern "C"를 추가했는데 작동합니다. –

0

GetProcAddress을 사용할 때 올바른 이름을 찾고 있지 않을 것으로 예상됩니다. dumpbin 또는 Dependency Walker을 사용하여 내 보낸 함수의 이름을 아직 확인 했습니까?

+0

예. Dependency Walker를 사용했고 함수가 내보내 졌음을 알았습니다. –

+0

한스 패 자매 (Hans Passant)가 말한 것처럼 기능이 발견되지는 않지만 dll은 ..... – jsimpson

관련 문제