2012-07-20 2 views
1

이 오류는 C++ CLI 프로젝트의 빌드 출력으로 생성 된 DLL을 사용하는 일반적인 C# 콘솔 프로그램에서 발생합니다. 정적 메서드가있는 DumbThingpublic ref class이 간단합니다. 단순히 그 함수를 호출하거나 최소한 하나의 작은 DumbThing 개체를 인스턴스화하고 C# CLI에서 생성 된 C++ CLI에서 가져온 코드를 C#이 호출 할 수 있음을 확인하고 싶습니다.하지만 더 이상 나를 괴롭히는 오류가 발생합니다.C++ 관리 DLL에서 C# 예외가 throw 됨 - EEFileLoadException * __ptr64

First-chance exception at 0x000007fefd2acacd (KernelBase.dll) in DumbTest.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x007fc228.. 

업데이트 : 원의 예외 아래에 또 다른 첫 번째 예외가있다 : 동료가이 컴파일 시간 문제 (일부 옵션)이 될 수 있음을 나에게 지적

First-chance exception at 0x77cace3b (ntdll.dll) in DumbTest.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff. 

,하지만 난하지 그것을 일으킬 수있는 단서가 있습니다. 누구든지 출발점에 대한 힌트를 제공해 줄 수 있습니까?

+1

C# 프로젝트가 64 비트 용으로 컴파일되도록 설정되어 있습니까 (항상 좋은 것은 아닙니다). 프로젝트 -> 속성 -> 빌드 -> 플랫폼 타겟. 설정되지 않은 경우 x86으로 설정해보십시오. –

+0

첫 번째 예외 exceptin은 런타임 문제입니다. Main의 시작 부분에서 C# 코드에 중단 점을 넣고이 예외 이전에 도달 할 수 있습니까? 그게 로더 문제인지 아닌지를 분명히 할 것입니다. –

+0

아니요, 주 함수에서 덤 (dumb) 클래스를 언급하면이 예외가 발생하고 중단 점은 무시됩니다. 그때로드 문제가 있어야합니다 ..하지만 난 그것을 일으킬 수도 모르겠다 .. 어쩌면 C + +의 DLL을 생성 다른 어셈블리가 필요합니까? (그것은 그것의 거주 폴더에 모든 것을 가지고 있고 그 종속성을 걷는 것이 어떤 불쾌감도 드러내지 않는다) .. – teodron

답변

1

아마 비트 문제입니다. 특정 플랫폼 용 C++/CLI 프로젝트를 컴파일 한 경우 C# 프로젝트가 해당 플랫폼을 적절히 설정했는지 확인하십시오. C# 프로젝트의 기본값은 JIT 컴파일러가 64 비트 아키텍처에서 x64 코드를 생성하도록하는 "모든 CPU"입니다. C++/CLI 프로젝트가 x86 용으로 빌드 된 경우 64 비트 시스템의 x64 프로세스에로드 할 수 없습니다.

+0

힌트를 주셔서 감사합니다, 나는 그것을 두 번 확인했습니다, dll은 64 비트입니다, C# 어플리케이션 플랫폼 또한 64 비트입니다, 프로세스는 64 비트. 동일한 결과, 내가 언급하는 것을 잊어 버린 또 다른 첫 번째 기회 예외를 제외하고. 그러므로 나는 질문을 업데이트했다. – teodron

관련 문제