DLL의 링크
<2>DLL의 링크
DLL를 링크하는 방법은 Implicit 링킹과 Explicit 링킹 두가지 방법이 있습니다.
(1)Implict 링킹
“DLL이 있어서 DLL이 바로 동적 링크되는데 LIB 파일이 왜 필요한가?”
이렇게 물어보는 사람도 있을 것입니다. 이유는 메인프로그램을 컴파일하고 링크할 때 DLL 안에 있는 함수들은 메인프로그램에는 어느 것과도 링크되어 있지 않아 실행 파일로 만들 때 에러가 나오기 때문입니다. 예를 들어, PaintImage(LPSTR filename);이라는 함수를 DLL로 만들어 놓고 메인프로그램에서 헤더에 extern "C"__declspec(dllimport)void PaintImage(LPSTR filename);이라고 정의하면 컴파일은 하지만 링크할 때 PaintImage 함수를 찾을 수 없다고 하며 에러를 리턴하고 실행 파일을 만들 수 없게 됩니다. 따라서, PaintImage라는 함수를 가상으로 만들어 그것을 0으로 설정해 주는 하나의 함수가 있어야 합니다.
void PaintImage(LPSTR fileanem)=0;
이렇게 만들어진 함수가 컴파일되어 LIB로 만들어집니다. 따라서, 메인프로그램에서는 실행 내용이 아무것도 들어 있지 않은 LIB를 프로젝트에 삽입하고 컴파일하는 것이죠. 그런 후 프로그램이 실행되면 LIB에 설정된 파일명에 따라 DLL을 로드하고 프로그램 메모리 안에 DLL에서 로드시킨 PaintImage 모듈을 삽입시키게 됩니다. 결국 우리는 DLL을 만들고 난 후 3가지의 파일을 이용해서 메인프로그램을 제작하게 되는 것입니다. 이 3가지 파일은 다음과 같습니다.
① 실질적으로 프로그램이 실행될 때 로드되는 DLL 파일(*.DLL)
② 컴파일할 때 설정해 주는 함수명이 들어 있는 헤더 파일(*.H)
③ 링크할 때 메인프로그램에 빈 함수를 설정하는 LIB 파일(*.LIB)
'API' 카테고리의 다른 글
WM_PAINT 메시지의 특별한 동작 (0) | 2008.08.31 |
---|---|
[Win32 - 김상형윈도우즈API정복-정리노트] 메타파일 Win32 (0) | 2008.08.30 |
ShellExecute 사용예 - 좋음 (0) | 2008.08.29 |
DLL 테스트할 샘플 코드 만들기 - 프로젝트 병합 살펴볼 것 (1) | 2008.08.29 |
스레드 V의 노트 (0) | 2008.08.15 |
- 윈도 프로그램의 시작과 끝. "Message" - (0) | 2008.08.15 |
## SendMessage & PostMessage ## (0) | 2008.08.15 |