티스토리 뷰

BASIC LANGUAGE/C++

*) DLL 추출 및 사용

chrisysl 2018. 5. 16. 14:17

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함