2011-02-15 6 views
4

C++ (32 비트 응용 프로그램, Windows 7 64 비트)를 사용하여 32 비트 dll을로드하려고했습니다. LoadLibrary는 NULL을 반환하고 GetLastError는 "지정한 모듈을 찾을 수 없습니다."에 대해 126을 반환합니다.LoadLibrary가 모듈을 찾을 수 없습니다. 오류 - 가능한 종속성 문제

전체 주소를 LoadLibrary 함수에 전달하고 있습니다. Dependency Walker에서 GPSVC.dll이 누락 된 종속성이라고 언급 한 dll을 열었습니다.

내가 수행 한 검색 결과에서 Dependency Walker가 종종이 GPSVC.dll을 누락 된 종속성으로 잘못 표시하는 것처럼 보였습니다. 32 비트 버전이 없으므로 실제 문제.

나는 과거에 dll을 너무 많이 사용하지 않았으므로 배울 수있는 비교적 간단한 문제 일 것입니다.

미리 도움을 청하십시오!

+1

몇 가지 추가 정보 : LoadLibrary를 호출하면 Visual Studio 디버거가 dll이로드 된 다음 즉시 언로드되었음을 보여줍니다. 나는 이것이 dll이 잘 발견되었다는 것을 확실히 확신하지만, DllMain 함수는 false를 리턴했다. 이것은 의존성 문제를 지적하는 것처럼 보이지만, 지금까지 나는 무엇이든 파악할 수 없었습니다. – Ash

답변

3

그럼 난 내 문제를 해결하고, 불행하게도 그것은 상당히 확실한 해결책이 있습니다. 나는 내 dll을 포함하는 디렉토리를 PATH 변수에 추가했다. 분명히 dll은 자신의 디렉토리에서 종속성을 찾지 않습니다.

+2

작동 하나 안전하지는 않습니다. http://msdn.microsoft.com/ko-kr/library/ms684175(VS.85).aspx의 "보안 설명"을 참조하십시오. 또한 http://msdn.microsoft.com/ko-kr/library/ms682586(v=VS.85).aspx를 참조하십시오. –

1

다른 DLL의 DllMain으로 디버그 할 수 있습니까? 그렇다면 디버거에서 직접 확인할 수 있습니다. Windbg를 사용하면 모듈로드를 중단 할 수 있기 때문에 발생하는 상황을 한 번 단계로 처리 할 수 ​​있습니다. 당신은 DLL의 lib 디렉토리에 직접 링크합니까? 그렇지 않은 경우 OS가 표시 할 오류 메시지를 확인하기 위해 그렇게 할 수 있습니다. 0xC0000142이면 DllMain은 false를 반환합니다. 0xC0000022이면 실행 파일 또는 종속 dll 중 하나에 실행 권한이 없습니다. 126 번 코드는 전체 스토리를 말하는 것처럼 보이는 모듈이 없습니다. 누락 된 dll 위치에 직접 PATH 변수를 설정할 수 있습니다. dll을 다른 컴퓨터에 배포합니까? 그렇다면 정상적인 컴퓨터에 설치되지 않은 디버그 C 런타임을 에 연결하는 것일 수 있습니다.

너의 것, 로이스 크라우스

관련 문제