본문 바로가기
개발/c++

.dll 과 .lib 의 차이점

by 김개발 2015. 1. 2.


.dll .lib 의 차이점[S1]

1.     Library

라이브러리란 함수, 데이터, 타입 등 여러가지 프로그래밍 요소들의 집합

-       같은 프로그래밍 코드를 작성할 필요를 제거하여 개발을 빠르게 할 수 있도록 함

1.1   static link

-       .lib

-       링크할 때 lib 파일을 포함하여 실행파일을 만듬

-       메인실행파일의 크기가 커짐, 소스레벨에서 재사용 가능

1.2   dynamic link

-       .dll

-       메인 실행파일에 포함되어 있지않고 독립적으로 존재

-       실행프로그램을 구동 시 필요할 때 마다 불러다 씀

-       메인실행파일의 크기가 작음, 프로그램 실행 속도 빨라짐

1.2.1       dll의 종류

-       일반 DLL : C++, 파스칼, 비베 등 다른 환경에서도 사용가능한 범용 DLL

C함수 형태로 만들어져야함. 클래스나 오버로딩된 함수를 라이브러리 형태로 만들수 없음

-       확장 DLL : 클래스나 오버로딩 된 함수도 라이브러리 형태로 외부프로그램에서 사용 가능(MFC에서만)

1.2.2       dll의 인수(__declspec(dllimport) 원형;

-       라이브러리 만들 때 : dllexport

-       라이브러리 사용시 : dllimport

-       Naked.. 나중에 찾아보기

1.2.3. dll 작성법

- 엔트리 포인트 필요없음(main, win main etc), 있긴 있음(dllmain)

- HINSTANCE, DWORD, LPVOID 타입를 전달해 줍니다..

 

이 함수가 실행되는건 4가지 조건이 발생했을때 호출이 되는데

DWORD에 호출 사유를 전달받으면 그에 따른 처리를 해주면 됩니다..

DLL_PROCESS_ATTACH - DLL이 로드 될 때

DLL_PROCESS_DETACH - DLL이 삭제 될 때

DLL_THREAD_ATTACH - DLL을 사용하는 프로세스에서 스레드를 생성할때

DLL_THREAD_DETACH - DLL을 사용하는 프로세서에서 스레드가 종료될때

각각의 값에 따라 처리를 해주면 됩니다

 

1.2.4.      dll 빌드

-       dll 빌드하면 dll 파일 과 lib 파일 생성

1.2.4.1 dll 파일

- 묵시적 연결(암시적implict 연결) :

a. 컴파일 시 로드할 라이브러리를 미리 정의,

b. __declspec(dllimport) 원형; 지정

c . lib 를 링커에 추가(보통 비주얼 스튜디오에선 프로젝트 속성->링커 쪽에 링크옵션 추가하는 부분 찾어서 넣어주면 됩니다..)

d. 링커 추가 후에 일반 함수 쓰듯이 사용

- 명시적(Explicit) 연결[S2]  : 실행파일이 DLL이 있어야만 실행 가능

           a. 자체적으로 읽을 라이브러리를 지정해서 로드

          b. 명시적 연결에는 기본적으로 3가지 함수가 사용되는데

라이브러리 로드할때 사용하는 LoadLibrary(읽을 파일) - 읽은 파일의 핸들을 리턴,

라이브러리에서 함수를 읽는 GetProcAddress(라이브러리 핸들, 함수명) - 함수 포인터 리턴,

읽은 라이브러리를 더이상 사용 안할서 해제할때 쓰는 FreeLibrary(라이브러리 핸들) - bool 리턴

 


 [S2]명식적 연결을 사용할때는 기본적으로 함수 포인터를 사용하는 방법을 알고 있어야 합니다..

사용법은 함수 포인터로 함수를 호출하는 방식이 묵시적 연결하곤 좀 틀리죠..

참고로 LoadLibrary dll을 읽을때 윈도우는 해당 dll의 카운트를 증가시킵니다..

FreeLibrary dll를 해제할땐 카운트는 하나 줄이죠..

결국 카운트가 0이되어야 해당 dll이 메모리에서 삭제되므로 이 둘은 쌍으로 사용해 줘야

OS의 메모리 낭비를 막을수 있답니다..

 

 


'개발 > c++' 카테고리의 다른 글

entry point must be defined  (0) 2015.01.02
DLL 관련 URL  (0) 2015.01.02
Visual Assist X 10.9.2052.0 download patch crack va_x.dll  (0) 2014.12.31
개발자 천국 홈피  (0) 2014.12.31
Whole Tomato Visual Assist  (0) 2014.12.31

댓글