2016-09-08 4 views
1

이 질문은 VB6 IDE/디버거의 관리 코드를 통해 네이티브 코드를 호출하는 경우에만 발생합니다. (아마 즉 델파이 등 다른 언어에서 디버깅에 적용됩니다하지만 난 모르겠어요.) 우리는 VB6에서 COM을 통해 C#을 DLL을 호출하는System.DllNotFoundException IDE에서 VB6 코드를 호출 할 때


. C# DLL은 p/invoke를 통해 컴파일 된 DLL에서 원시 코드를 호출하는 데 의존합니다.

VB6의 IDE이 예외의 C# 코드의 결과로 호출 을 실행 :

System.DllNotFoundException: Unable to load DLL 'name_of_library': 
The specified module could not be found. 

우리는 발생하지 않습니다이 오류를 컴파일 VB6 코드를 실행하지만합니다. 모든 원시 코드 DLL은 컴파일 된 C# DLL과 함께 위치합니다. VB6 코드는 응용 프로그램의 EXE를 생성합니다.

왜이 오류가 발생합니까?

+0

아래에 게시 한 해결 방법을 발견했습니다. 그러나 그것이 유일한 해결책인지 또는 가장 좋은 것인지 확실하지 않습니다. – DaveInCaz

+0

중복이 아닙니다. 이 문제는 VB6 IDE 내에서 C#으로 인터페이싱하는 경우에만 발생합니다. 어쩌면 다른 IDE에도 적용 할 수 있습니다. – DaveInCaz

답변

1

문제는 기본 코드 DLL의 위치 인 것 같습니다.

EXE를 포함한 모든 항목을 컴파일 한 다음 모든 DLL을 동일 위치에 배치하면 EXE가 Windows에서 DLL을 찾는 데 사용하는 검색 순서를 만족시킵니다.

그러나 VB6 IDE에서 실행 중일 경우 은 DLL 검색에 사용 된 EXE 위치를 결정하는 IDE 자체의 위치입니다. 나는 것을했을 때

C:\Program Files (x86)\Microsoft Visual Studio\VB98

오류가 해결되었습니다

즉, 내 경우에는 내가 네이티브 코드 DLL을 찾을 수 있었다. 이것은 어색하지만 실행 가능합니다.

+0

끔찍한 생각, 해당 폴더를 수정하지 말고 문제에 대한 더 나은 해결책을 찾으십시오. –

+0

나는 이것이 "좋은 생각"이라고 말하지 않았습니다. 그러나 문제를 설명합니다. VB6 코드를 컴파일하는 대안 (질문에서 언급했듯이)은 대화식으로 디버깅 할 수있는 능력을 잃어 버렸습니다. VB6는 공룡이기 때문에 요즘에는 해킹을 유지하기 위해 어느 정도의 수준의 해킹이 필요할 수도 있습니다. – DaveInCaz

+2

네, 이것이 올바른 해결책입니다. IDE에서 기본 코드를 실행하면 항상 해석됩니다. 따라서 운영 체제가 다른 DLL을 찾는 데 사용할 수있는 실행 파일이 없습니다. 하나만 제외하고 vb6.exe. 기술적으로 PATH 환경 변수를 가진 원숭이가 될 수 있습니다. 정확하지는 않습니다. 사용자의 컴퓨터에서 실행되는 정확한 방법을 실행하는 것은 옵션이 아닙니다. –

관련 문제