Friday, April 10, 2015

Managed C++에서 System.BadImageFormatException 에러

An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll
Additional information: Could not load file or assembly 'CLRMC8, Version=1.0.3820.17987, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

위와 같은 에러메세지가 Managed C++.NET에서 DLL로 만든 다음에 C# 프로젝트에서 참조로 넣어서 로딩할때 발생하였다. (개발환경은 Windows XP 64Bit/Visual Studio 2005/2008/2010)

C#으로 Class Library를 만들어서 C# 프로젝트에서 참조로 넣었을때는 되는데 왜 MC++로 만들때는 저렇게 에러가 나는가... 고민끝에 나온 결론은 C++은 x86/x64가 엄격하게 분리가 되며, C#은 Any CPU라는 것이 있어서 알아서 적용이 되는 것 때문에 그랬던 것이다.

따라서 위와 같은 문제를 해결하려면, C++을 x86 -> C#도 x86으로 명시적으로 Configuration Manager에서 설정하고, C++을 x64일 경우에는 C#도 x64로 명시해 주어야 한다.


No comments:

Post a Comment