2010-01-29 4 views
3

네이티브 C++ 코드 주위에 래퍼를 만드는 C++/CLI 어셈블리를 만들었습니다. 리소스를 컴파일하면 어셈블리가 리소스로 추가 될 때 C# 프로젝트에 잘로드됩니다. 내 응용 프로그램 내에서 내 개체 및 인텔리에 액세스 할 수 있지만 구축 할 때, 그것을 제외하고 충돌 :C++/CLI/C# BadImageFormat 양식로드시 예외

BadImageFormat

버전을 파일 또는 어셈블리 'MyCLI를로드 할 수 없습니다 = 1.0 .3680.28432, 문화 = 중립, PublicKeyToken = null ' 또는 그 종속성 중 하나. 시도가 올바르지 않은 형식의 이있는 프로그램을로드하려고했습니다.

나는 내 폼로드 이벤트에로드 :

MyCLI.myCLI z; 

... 내가 컴파일 할 때, 그것은

사람을합니까

Application.Run(new Form1()); 
C#으로 내 주요 생성자에서이 라인에 충돌 이 예외의 원인이 될 수있는 아이디어가 있습니까?

감사합니다.

답변

7

이 코드는 64 비트 운영 체제에서 실행하려고합니다. C# 코드는 64 비트 컴퓨터 코드로 멋지게 컴파일됩니다. 그러나 32 비트 C++/CLI 어셈블리를로드하려고 시도하면 벽에 부딪 힐 수 있습니다.

C# 프로젝트에서 Project + 속성, 응용 프로그램 탭, 플랫폼 대상 = x86을 사용하십시오. C++/CLI 어셈블리의 64 비트 버전을 생성하는 것도 가능합니다. Build + Configuration Manager를 사용하십시오. 플랫폼 대상을 사용하는 것이 더 나은 솔루션입니다.

+0

필자는 이제 그 점을 지적했음을 확신합니다. 그러나 C++/CLI 프로젝트에서 Win32가 아닌 다른 것을 표시 할 수없고 C# 프로젝트에 플랫폼 대상 드롭 다운이 비활성화되어 있습니다. 또한 나는 64 비트 운영 체제 –

+0

에 있음을 유의하십시오. 그것은 매우 이상합니다. Corflags.exe를 사용하여 동일한 작업을 수행 할 수 있습니다. VS 설치 프로그램을 다시 실행하여 64 비트 C/C++ 컴파일러를 가져 오면 기본적으로 설치되지 않습니다. –

+0

C++ 프로젝트를 x64로 컴파일하려면이 기사와 같은 몇 가지 기사 (http://msdn.microsoft.com/en-us/library/h2k70f3s(VS.80).aspx)를 읽어야합니다. –