2004.11.02 16:55
.dll .h .lib의 차이... ^^;;;
조회 수 1220 추천 수 0 댓글 0
우선 자주 쓰이는 내용을 따로 묶은 것은 dll입니다.
dll에는 function이나 혹은 class 정도가 들어가있게 됩니다.
쉽게 얘기해서 code가 build되어 들어있습니다.
그런데 그 dll을 쓰려면 어떤 내용이 있는지를 알아야 합니다.
void test(); 라는 함수가 test.dll에 있는데 그걸 쓰려는 사람은 void test();라는 함수가 거기 있다는 사실을 알아야 하겠죠.
그걸 사용하려면 그저 test라는 function의 type을 선언하고 그 dll을 load한 후 그 함수의 pointer를 뽑아내면 됩니다.
msdn의 예를 보여 드리죠.
typedef VOID (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary("myputs");
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");
// If the function address is valid, call the function.
if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
myputs.dll에서 "void myPuts( LPTSTR )"라는 함수를 이끌어내서 사용하죠.
그렇다면 결국 dll만 알고 어떤 함수가 있는지만 알면 dll을 충분히 사용할 수 있다는 말이 됩니다.
즉, 님이 질문에서 적으신 lib나 h는 전혀 필요가 없다는 말이죠.
그런데 말이죠.. 그 함수가 만약 sdk에서의 함수처럼 수백개, 수천개라면?
일일이 그 dll쓰려고 할 때마다 getprocaddress 일일이 해줘야 할까요?
그럴 순 없겠죠? 엄청난 시간 낭비가 되겠죠.
그래서 함수 선언부를 미리 알려줍니다. ( 몸체는 dll 안에 있겠죠.. )
.h, 즉 header에 그런 걸 보통 기록해서 공유하게 됩니다.
선언부를 알면 coding이 가능하죠. ( compile이 가능하다는 얘기.. )
그런데 함수 선언부를 안다해도 getprocaddress를 안하는 건 아니죠.
그럴 땐 .lib를 씁니다.
dll 어디에 test()라는 함수가 있고, test2()는 어디에 있고 등등의 정보를 .lib에 기록해두는 거죠.
그래서 .h와 .lib를 주면 다른 사람들이 해당 dll에 관해 "linking"을 할 수 있게 되는 거죠.
linking하는 방법은 여러가지가 있습니다...
전에 어떤 분이 질문하셨는데.. #pragma comment 로 할 수도 있구요..
project settings에서 link tab에서 할 수도 있구요..
말이 또 길어졌네요. --;
결론은.. dll에는 function같은 code들이 있고, 이를 사용하기 위해 h와 lib가 보통 필요하게 됩니다.
h는 compile ( syntax )할 때 필요하며, lib는 link할 때 필요합니다.
dll에는 function이나 혹은 class 정도가 들어가있게 됩니다.
쉽게 얘기해서 code가 build되어 들어있습니다.
그런데 그 dll을 쓰려면 어떤 내용이 있는지를 알아야 합니다.
void test(); 라는 함수가 test.dll에 있는데 그걸 쓰려는 사람은 void test();라는 함수가 거기 있다는 사실을 알아야 하겠죠.
그걸 사용하려면 그저 test라는 function의 type을 선언하고 그 dll을 load한 후 그 함수의 pointer를 뽑아내면 됩니다.
msdn의 예를 보여 드리죠.
typedef VOID (*MYPROC)(LPTSTR);
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary("myputs");
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");
// If the function address is valid, call the function.
if (fRunTimeLinkSuccess = (ProcAdd != NULL))
(ProcAdd) ("message via DLL function\n");
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method\n");
}
myputs.dll에서 "void myPuts( LPTSTR )"라는 함수를 이끌어내서 사용하죠.
그렇다면 결국 dll만 알고 어떤 함수가 있는지만 알면 dll을 충분히 사용할 수 있다는 말이 됩니다.
즉, 님이 질문에서 적으신 lib나 h는 전혀 필요가 없다는 말이죠.
그런데 말이죠.. 그 함수가 만약 sdk에서의 함수처럼 수백개, 수천개라면?
일일이 그 dll쓰려고 할 때마다 getprocaddress 일일이 해줘야 할까요?
그럴 순 없겠죠? 엄청난 시간 낭비가 되겠죠.
그래서 함수 선언부를 미리 알려줍니다. ( 몸체는 dll 안에 있겠죠.. )
.h, 즉 header에 그런 걸 보통 기록해서 공유하게 됩니다.
선언부를 알면 coding이 가능하죠. ( compile이 가능하다는 얘기.. )
그런데 함수 선언부를 안다해도 getprocaddress를 안하는 건 아니죠.
그럴 땐 .lib를 씁니다.
dll 어디에 test()라는 함수가 있고, test2()는 어디에 있고 등등의 정보를 .lib에 기록해두는 거죠.
그래서 .h와 .lib를 주면 다른 사람들이 해당 dll에 관해 "linking"을 할 수 있게 되는 거죠.
linking하는 방법은 여러가지가 있습니다...
전에 어떤 분이 질문하셨는데.. #pragma comment 로 할 수도 있구요..
project settings에서 link tab에서 할 수도 있구요..
말이 또 길어졌네요. --;
결론은.. dll에는 function같은 code들이 있고, 이를 사용하기 위해 h와 lib가 보통 필요하게 됩니다.
h는 compile ( syntax )할 때 필요하며, lib는 link할 때 필요합니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 캐논렌즈 모음 | 까만롤빵 | 2007.08.12 | 2753 |
공지 | 안녕하세요... 환영합니다... | 까만롤빵 | 2002.12.24 | 1578 |
120 | 헤헤... 홈씨어터도 완성하고... 컴터 업글도 끝냈습니당... 5 | 까만롤빵 | 2004.10.10 | 1214 |
119 | 컴퓨터로 AC3 출력을 잘하려면... ^^;;; 2 | 까만롤빵 | 2004.10.11 | 1244 |
118 | 아.. 정호형.... 참고하세용... 2 | 까만롤빵 | 2004.10.13 | 956 |
117 | 롤빵님 영화관 설치 비법좀 공개하시와용.. 헤헤 1 | 아피엄마 | 2004.10.16 | 1067 |
116 | 토요일 처음 출근했슴당... 2 | 까만롤빵 | 2004.10.16 | 1155 |
115 | ^^;;; | 까만롤빵 | 2004.10.17 | 1 |
114 | 오랫만이네~~ 롤빵~~ 3 | 디이제이 | 2004.10.20 | 1163 |
113 | RAID에 대해서 알아볼까용? 2 | 까만롤빵 | 2004.10.25 | 1144 |
112 | 깜장 럴빵뉨~~ 2 | 아피엄마 | 2004.10.25 | 1083 |
111 | 깜정롤빵님......^^; 질문이요.. 7 | 최용길 | 2004.10.27 | 1234 |
» | .dll .h .lib의 차이... ^^;;; | 까만롤빵 | 2004.11.02 | 1220 |
109 | 결국에......... 5 | 최용길 | 2004.11.04 | 1250 |
108 | 회사에서 밤샐줄이야..... 1 | 까만롤빵 | 2004.11.06 | 1180 |
107 | NF 소나타 제원 및 가격표... 3 | 까만롤빵 | 2004.11.10 | 3287 |
106 | 이래저래 바쁜 주간이 지났네용... 2 | 까만롤빵 | 2004.11.16 | 1001 |