2009-06-04 6 views
1

컴파일 된 플랫폼을 변경하여 dll을 x64로 변환하기 위해 VC++ (VS2008)로 컴파일하려고 시도했을 때 기본 C 언어를 사용하여 작성된 32 비트 DLL이있었습니다. 하지만 'x64'플랫폼 인 C# 응용 프로그램에서 dll에 액세스하려고 시도하면 DLL이로드되지 않습니다. 내 응용 프로그램과 DLL을 연결하기 위해 Dllimport를 사용했습니다.지정한 모듈을 찾을 수 없습니다 - 64 비트 dll

Vista에서 사용하는 운영체제이지만 dll을로드하지 못했다고 내 응용 프로그램에서 at dll 함수를 호출 할 수 없습니다.

이 문제를 해결할 방법이 있습니까?

귀하의 도움을 기다리고 있습니다.

감사합니다, 조지아

+0

아마 조금 더 많은 정보가 필요합니다 : 64 비트 Vista에서 실행 중입니까? C# 응용 프로그램에서 32 비트 dll을 사용할 수 있습니까? –

+0

64 비트 OS에서이 프로그램을 실행하는 경우 빌드 탭에서 CPU 유형을 x86으로 설정하지 않았는지 다시 한 번 확인하십시오. (어떤 경우, 32 비트 DLL과 64 비트 OS를 사용했다면) –

+0

그 x64 만 검사했다. –

답변

0

"dependency walker"(ldd와 같은 도구 이기기, www.dependencywalker.com) 도구를 사용하여 무엇에 대한 링크를 찾으십시오. 도움이 될 수 있습니다.

+0

Visual Studio 명령 프롬프트에서 "dumpbin/DEPENDENTS MyModule.dll"을 사용하여 종속성을 확인할 수도 있습니다. 제 경우에는 VCRuntime140.dll이 누락되었습니다. – Michael

0

내 생각 엔이 될 것 종속성, 새 DLL은 필요로하는 일부 누락 된 64 비트 DLL의가있을 수 있습니다.

+0

종속성 워커를 사용하여이 DLL에 대한 종속성을 표시하지 않았습니다. 그래서 나는 여기서 문제가 무엇인지 추측 할 수 없었다. –

+0

로드에 실패하면 어떤 오류 코드가 나타 납니까? 실험을 시도해보십시오. 작은 C++ x64 프로그램을 작성하여 DLL을로드하여 문제가 DLL 또는 일부 .NET 문제인지 확인하십시오. –

0

dll의 다른 버전 (x86/x64)을 어디에 구축하는지 확인하십시오.

가장 쉬운 방법은 64 비트 DLL의 대상 디렉토리를 대상 폴더의 'x64'하위 디렉토리로 설정하는 것입니다. 64 비트 솔루션 구성에서 C#의 대상 디렉토리를 'x64'디렉토리로 설정하십시오.

이렇게하면 각 플랫폼의 exe가 올바른 dll을로드하려고 시도합니다.

0

감사합니다.

내가 C : \ Windows \ System32 \ 아래에 dll을 놓았을 때 오류가 해결되었습니다.

덕분에, 조지아

+1

답변으로 표시해야합니까? – kbyrd

-1

나는이 번이 라인을 따라에 문제가 있었다. C#에서 호출해야하는 하드웨어 부분에 대한 인터페이스로 작동하는 C++ DLL이있었습니다. 그러나 하드웨어 조각이 연결되어 있지 않으면 DllImport 호출이 실패합니다. DLL 초기화 함수가 실패를 반환했기 때문에 C#이 DLL을로드 할 수 없다고 말했기 때문에, DLL이 있습니다.

C 코드에서 DLL을 설정할 때 일종의 오류가 발생하지 않는지 확인하십시오.

관련 문제