본문 바로가기

김탱 개발자/윈도우프로그래밍

DLL 로딩 시 검색 순서

Visual Studio에서 라이브러리 파일을 링크 및 빌드해놓고 DLL을 제대로 된 경로에 넣어 놓지 않으면, DLL을 찾을수 없다는 에러 메세지가 뜬다.

아래와 같은 순서로 해당 경로에 DLL이 없을 경우 에러메세지가 뜨게 되는데 DLL을 아래 경로에 중복해서 넣어놓았을 경우, 버전업데이트 시에 분명 업데이트 버전을 넣었는데 반영이 안되는 경우가 발생 할 수있다.


1. DLL을 호출한 EXE파일이 있는 디렉토리

2. 프로세스의 현재 디렉토리

3. 윈도우 시스템 디렉토리

4. 윈도우 디렉토리

5. PATH 환경 변수에 저장된 디렉토리


윈도우쪽 디렉토리로 넘어가게 되면 외부에 다른 DLL파일명과 중복되는 경우(난 ABC.dll을 만들었는데, 다른 프로그램에서도 ABC.dll로 만들 경우)가 생겨 충돌하기 때문에 현재 디렉토리에 넣는게 좋다고 본다.


추가적으로 프로그램 개발 시에 Ctrl+F5로 테스트를 많이 진행하게 되는데, Debug or Release 폴더 안에 DLL을 넣어주어도 상관없지만 프로젝트 폴더안에 넣어주어도 DLL경로를 인식한다.(대신, Debug or Release 폴더안에서 EXE 파일 실행 시에는 DLL경로를 인식 못한다.)

아마도 Ctrl+F5는 VS에서 실행하는거기 때문에 프로젝트 폴더를 2번에서 찾게되서 들어가지 않나 싶다.


원문 : https://msdn.microsoft.com/ko-kr/library/7d83bc18(v=vs.100).aspx

1. The directory where the executable module for the current process is located.

2. The current directory.

3. The Windows system directory. The GetSystemDirectory function retrieves the path of this directory.

4. The Windows directory. The GetWindowsDirectory function retrieves the path of this directory.

5. The directories listed in the PATH environment variable.