2009-08-07 3 views
25

그래서 하드웨어 상호 작용을위한 PsyREG.dll이라는 dll을 제공하는 하드웨어 난수 생성기와 dll의 메소드를 사용하기위한 일부 C# 소스를 SDK를 사용하고 있습니다.DllNotFoundException하지만 DLL이 있습니다.

이전에는 작동했지만 어떻게 든 작동을 멈췄습니다. 현재 문제의 기기에 실제로 액세스 할 수 없기 때문에 내 손이 약간 묶여 있으므로 많은 것을 시도 할 수는 없습니다 ...

하지만 여기에 이상한 점이 있습니다. dll은 항상 존재하는 동일한 장소에 있습니다. Ahd 사실 File.Exists ("PsyREG.dll")는 true를 반환하고 두 번 확인했는데 이것은 제공된 C# 소스가 가져온 것과 정확히 같은 방식입니다. [DllImport ("PsyREG.dll")].

아이디어가 있으십니까?

답변

34

아마도이 DLL에는 응용 프로그램의 동일한 폴더에 등록되지 않았거나 존재하지 않는 종속성이 있습니다.

+0

감사

Project properties>C/C++은, 그것은 그 것이었다. 필요한 몇 가지 다른 것들이 있었지만, 몇 가지 이유로 그것을 체크하지 않을 것이라고 생각했습니다. (다른 파일이 아니라 PsyREG.dll을로드 할 수 없다는 사실을 포함해서) – Asmor

+1

이런 식의 시간은 제가 리플렉터를 부수십시오. 그것은 당신에게 의존성을 보여줄 수 있습니다. 특히, 발견되지 않은 것을 보여줄 수 있습니다. –

+0

정말요? 리플렉터가 관리되지 않는 의존성을 찾습니까? 그 옵션은 어디에 있습니까? – erikkallen

1

아마 dll의 특정 제품 버전이 필요한지 확인하고 제품 버전이 여전히 올바르게 일치하는지 확인해야합니다. 내 DLL의 중 하나에 관련하여 같은 예외를 처리했다 http://www.dependencywalker.com/

4

열기 DLL은 (의이 A를 부르 자). C#은이 DLL (A) (실행 파일과 동일한 폴더에있는 동안)을 찾을 수 없다고 주장했기 때문에 충돌이났습니다.

다른 DLL (B)에 종속성이있는 A에 문제가 있음이 나타났습니다. B은 경로에 없으므로 A이 필요할 때로드 할 수 없습니다. B에 다른 DLL이 필요하기 때문에 해결책은 B의 디렉토리를 PATH 환경 변수에 추가하는 것이 었습니다.

사실 B에서 찾을 수 없습니다 때 A가 발견되지 않는 것을 말하는 오류와 C#을 충돌 ...

+0

이 응용 프로그램이 나를 위해 일을했다. –

+0

cool ...이 도구를 사용하면 배포시 많은 설치 문제를 해결할 수있었습니다. – cbuteau

0

에 문제가있는 시스템에

+0

''경로 환경 변수에 B의 디렉토리를 추가하는 것이 해결책 '이라고 설명 할 수 있습니까? 현재 거의 동일한 문제로 어려움을 겪고 있습니다. 차이점은 내 Dll이 다른 Dll 대신 * .so 파일을 원합니다. – Stefan

+0

@Stefan 필자는 Linux 터미널에서 PATH 환경 변수에'YOUR-SO-FILE-PATH' 디렉토리를 추가하기 위해'export PATH = $ PATH : YOUR-SO-FILE-PATH'를 사용한다고 믿습니다. 이렇게하면,'so' 파일을로드 할 필요가있을 때, PATH에 지정된 경로가 검색되어'so' 파일을 찾습니다. – M2X

+0

고마워, 나는 그 방법을 시도했지만 실제로 작동하지 않았다. 나는 다른 곳에서 나의 dll을'/ usr/lib' 디렉토리로 옮기고 (예, 실제로 리눅스 시스템이다), 더 이상 설정하지 않고 작업했다. – Stefan

0

나는이 문제에 달려과 해결 방법 흥미 다음

종속성있다/MD에서 컴파일하면 msvcr90.dll에. 대신/MT를 사용하여 코드를 컴파일 해보십시오. >Code Generation>Runtime Library: /MT

관련 문제