본문 바로가기
개발 이야기/C# 이야기

C# DLL 오류 DllNotFoundException BadImageFormatException

by 런던살자 2020. 9. 29.

안녕하세요 마블랑입니다.

 

C#이나 C++ 등 프로그래밍 언어로 개발을 할때 일일이 다 구현할수 있다면 다른 라이브러리를 사용할 필요가 없습니다.

 

하지만 그렇게 하기도 어려울뿐더러 개발 시간을 단축시켜 생산성을 높여야 하기때문에 라이브러리를 사용하는데요

 

윈도우에서는 DLL 을 주로 사용합니다.

 

 

잘 구현되어있는 DLL을 그대로 사용하여 개발을 한다면 굉장히 편한데요

 

그런데 DLL을 불러와서 사용하는 도중에도 오류가 발생할때가 있더군요

 

DLL내부에서 잘못된거면 해당 DLL을 다른방법으로 대체하면 되는데요

 

불러오는 도중에 에러가 발생했으니 해결방법을 찾아서 해결하면 되는문제입니다.

 

이번 포스팅은 DLL을 불러올때 가끔 발생하는 아주 기초적인 오류에 대한 해결방안입니다.

 

보통 DLL을 불러올때 발생하는 에러로 DllNotFoundExceptionBadImageFormatException 가 있을거 같군요

 

1. DllNotFoundException

 

이 에러는 프로세스에서 DLL을 찾지 못할때 발생합니다.

 

C# 에서 DLL을 사용할때 보통 [DllImport("TESTER.dll")] 이런식으로 사용을 합니다.

 

하지만 이렇게 지정한 DLL Import가 DLL을 찾지 못해서 발생하는 에러인데요.

 

특별히 경로를 지정해주지 않았다면 실행파일과 같은 위치에 DLL을 이동시키지만 이렇게 했을 경우도 에러가 발생할수도 있습니다.

 

바로 DLL 안에 DLL이 또 있는 경우 그 내부 DLL도 같은 폴더로 옮겨와야 합니다.

 

예를 들어 위에 임포트시킨 TESTER.dll이 내부 동작에서 TESTING.dll 을 사용한다면 실행파일이 있는 폴더 안에 TESTER.dll, TESTING.dll 모두 같이 위치해 있어햐 합니다~

 

 

2. BadImageFormatException

 

DllNotFoundException 에러를 해결한뒤에 실행을 해보니 또 제대로 동작을 하지 않는 경우가 있습니다.

 

그 이유는 실행환경이 맞지 않아서 인데요.

 

C#으로 구현된 코드는 32bit (x86)과 64bit (x64) 이렇게 두가지 환경에서 실행할수 있도록 빌드가 가능한데요

 

DLL 에도 32bit와 64bit, 두 환경에서 사용할수 있도록 빌드를 해준답니다.

 

그래서 32bit 프로세스는 32bit DLL을 사용해야하고, 64bit 프로세스는 64bit DLL을 사용해야 합니다~

 

보통 64bit 프로세스는 32bit 프로세스가 실행이 가능한데 기억하기로는 DLL의 경우 64bit 프로세스에서는 64bit DLL만 사용가능했던거 같군요

 

 

C# 에서 DLL 을 사용할때 발생하는 오류, 가장 기초적인 에러 2가지 DllNotFoundException와 BadImageFormatException의 해결방법은 알아보았습니다.

 

C# 위주로 프로그래밍을 해서 C++이나 C, JAVA 등 에서도 두가지 에러가 발생하는지 모르겠군요.

 

하지만 에러가 발생한다면 위 해결방법처럼 경로와 32bit,64bit 구분에 대한 문제일 확률이 높으니 한번 적용해보시기 바랍니다~

 

 

이상 마블랑이었습니다.

 

읽어주어서 고맙습니다.

댓글