티스토리 뷰
DLL(Dynamic Linking Library)
- 프로그램 컴파일안에 포함되지 않고 실행할때만 잠깐 로딩되어 실행되는 모듈 또는 함수의 집합체
- 컴파일을 하여 exe파일이 생성된 것은 하나의 exe에 모든 코드를 적재하여 하나로 묶어서 만든것을 말한다.
- DLL은 이런 하나의 exe에 들어가는 User 라이브러리 모듈(함수덩어리)을 DLL의 형태로 제공하여, exe를 가볍게 만들고 프로그램 실행시에 이 DLL을 exe가 참조되도록만 하는 기능을 한다.
- DLL의 장점은 유지관리가 편리하다는 것이다.
- 예시로 FTP 프로그램을 만들어서 배포했다고 했을 때, 제작자는 DLL 파일들을 각각 접속 및 다운로드 DLL, 유지 및 업데이트 DLL, 기타 기능 DLL과 같이 exe와 함께 배포를 했는데, 추후 다운로드 기능에 문제가 있어 패치를 해야 될 경우 해당되는 다운로드 DLL만 수정하여 업데이트로 배포하면 된다.
- 파일용량이 클수록 DLL을 이용하여 제작하는것이 프로그램 유지관리에도 장점이다.
DLL 추출
# 마법사를 이용하여 만들어본다. 나중에 생성될 dll은 프로젝트의 이름을 따라간다.
# 동적 연결 라이브러리를 선택한뒤 확인을 눌러 프로젝트 생성을 마친다.
# 먼저 헤더파일
헤더에서는 cpp로 구현하고자 하는 부분의 선언이 들어간다.
우선 빌드 환경을 Release로 또 환경에 따라 x64 or x86으로 변경해준다.
그다음 #ifdef 를 통해 dll을 export할지 import할지 결정한다.
MAKEDLL_EXPORTS는 해당 프로젝트 명이다. 자기자신의 프로젝트에선 export하고 그 외엔 import 한다는 의미이다.
이때 프로젝트명은 모두 대문자로 작성해줘야 인식된다.
그리곤 구현할 함수에대한 선언이 들어간다.
#ifdef 으로 C로 작성되었는지 CPP로 작성되었는지에 따라 컴파일을 결정한다.
DLL로 묶어내고자 하는 함수들을 정의할때 매번 앞에
extern "C" __declspec(dllexport) 또는 __declspec(dllimport) 를 붙혀 이 함수를 DLL로 뽑아낼 것이며,
export 또는 import여부를 명시해 줘야한다.
하지만 위와같이 처리하면 여러 함수를 DLL로 뽑아낼 경우에 번거로움 없이 사용할 수 있다.
# cpp파일에선 구현을 담당해주면 된다.
# 프로젝트가 생성된 폴더의 Release 경로에 가보면 dll파일와 lib파일이 모두 생성되어있다.
이제 이걸 가져다 쓰면 된다.
DLL 사용
# UseDLL이라는 콘솔프로젝트를 하나 생성하였다. 그리고 cpp파일이 있는곳에 dll과 lib를 같이 붙혀넣어준다.
# 헤더에 DLL을 끌어 쓸 것임을 컴파일러에게 알려준다.
그다음 실제 DLL에서 가져다 쓸 함수를 적어주면 된다. 이 때, 생성시와 동일하게 extern "C"로 묶어준다.
# 그다음 해당 헤더를 포함시킨 뒤 그냥 가져다 쓰면 된다.
이 때, #pragma comment를 이용해서 DLL을 사용 할 DLL을 알려주기만 하면 된다.
'BASIC LANGUAGE > C++' 카테고리의 다른 글
*) 상속, 다형성, 가상함수 (0) | 2018.03.12 |
---|---|
*) C++를 이용한 TCP 소켓통신 구현 (13) | 2018.02.27 |