Contents:
- 1 Dynamic Link Library ÀÇ °³³ä
- 1.1 Static Library ¿Í ºñ±³
- 1.2 DLL ÀÇ ÀåÁ¡
- 2 °ü·Ã¼Àû
- 3 Áֿ丵ũ
- 4 DLL Programming ½ÃÀÛÇϱâ
- 4.1 DLL ¿¡ ´ëÇÑ ¹è°æÁö½Ä
1 Dynamic Link Library ÀÇ °³³ä #
1.1 Static Library ¿Í ºñ±³ #
- Windows API Á¤º¹
- GAME PROGRAMMING Gems 2
- Mark Deloura ¿Ü °øÀú, ·ù±¤ ¿ª, Á¤º¸¹®È»ç
3 Áֿ丵ũ #
4 DLL Programming ½ÃÀÛÇϱâ #
4.1 DLL ¿¡ ´ëÇÑ ¹è°æÁö½Ä #
- Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ Æ÷ÇÔµÈ µð·ºÅ丮
- ÇÁ·Î±×·¥ÀÇ ÇöÀç µð·ºÅ丮
- À©µµ¿ìÁîÀÇ ½Ã½ºÅÛ µð·ºÅ丮
- À©µµ¿ìÁî µð·ºÅ丮
- PATH ȯ°æ º¯¼ö°¡ ÁöÁ¤ÇÏ´Â ¸ðµç µð·ºÅ丮
5 DLL °ú ÇÁ·Î±×·¥ÀÇ ¿¬°á #
Implicit Link
Explicit Link
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved );
| °ª | ¼³¸í |
| DLL_PROCESS_ATTACH | DLL ÀÌ ÇÁ·Î¼¼½º°¡ ½ÃÀÛµÉ ¶§³ª LoadLibrary ÇÔ¼ö°¡ ¸®ÅÏÇϱâ Àü¿¡ È£ÃâµÈ´Ù. |
| DLL_PROCESS_DETACH | DLL ÀÌ ÇÁ·Î¼¼½º°¡ Á¾·áÇÒ ¶§³ª FreeLibrary ÇÔ¼ö°¡ È£ÃâÇϸé È£ÃâµÈ´Ù. |
| DLL_THREAD_ATTACH | DLL À» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÌ ½º·¹µå¸¦ »ý¼ºÇÒ ¶§¸¶´Ù È£ÃâµÈ´Ù. ÃÖ»óÀ§ ½º·¹µå´Â DLL_PROCESS_ATTACH ¸¦ È£ÃâÇÑ´Ù. |
| DLL_THREAD_DETACH | DLL À» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ ½º·¹µå¸¦ Á¾·áÇÒ ¶§¸¶´Ù È£ÃâÇÑ´Ù. |
6.2 DLL µð¹ö±ë #
1 #ifdef EXAMPLE_EXPORTS
2 #define EXAMPLE_API __declspec(dllexport)
3 #else
4 #define EXAMPLE_API __declspec(dllimport)
5 #endif
6
7 // Ŭ·¡½ºÀÇ Export / Import ¼±¾ð
8 class EXAMPLE_API CExample {
9 public:
10 CExample(void);
11 };
12
13 // º¯¼öÀÇ Export / Import ¼±¾ð
14 extern EXAMPLE_API int nEx;
15
16 // ÇÔ¼öÀÇ Export / Import ¼±¾ð
17 EXAMPLE_API int fnEx(void);
7.2 ¼Ò½º ÆÄÀÏ #
1 #include "EXAMPLE.h"
2
3 // DllMain ÇÔ¼ö
4 BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
5 {
6 switch( ul_reason_for_call )
7 {
8 case DLL_PROCESS_ATTACH:
9 case DLL_THREAD_ATTACH:
10 case DLL_THREAD_DETACH:
11 case DLL_PROCESS_DETACH:
12 break;
13 }
14 return TRUE;
15 }
16
17 // º¯¼ö Á¤ÀÇ
18 EXAMPLE_API int nEx=0;
19
20 // ÇÔ¼ö Á¤ÀÇ
21 EXAMPLE_API int fnEx(void)
22 {
23 return 0;
24 }
25
26 // Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö Á¤ÀÇ
27 CExample::CExample()
28 {
29 return;
30 }
8 Visual Studio ÇÁ·ÎÁ§Æ® ¼³Á¤Çϱâ #
ÇϳªÀÇ Workspace ¿¡¼ ¶óÀ̺귯¸®¿Í ÇÁ·Î±×·¥À» °°ÀÌ °³¹ßÇÒ °æ¿ì ´ÙÀ½°ú °°ÀÌ ÇÁ·ÎÁ§Æ®°¡ ±¸¼ºµÉ °ÍÀÌ´Ù.
ÀÌ·± °æ¿ì, ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¼³Á¤ÇÏ°Ô µÇ¸é Æí¸®ÇÏ°Ô ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖ´Ù.
8.1 ÇÁ·ÎÁ§Æ®ÀÇ Á¾¼Ó °ü°è ¼³Á¤ #
[ Project ] ¸Þ´º¿¡¼
[ Dependencies... ] ¸¦ ¼±ÅÃÇÏ¿©
Library ÇÁ·ÎÁ§Æ®¸¦
Example ÇÁ·ÎÁ§Æ®¿¡ Á¾¼ÓµÇµµ·Ï ¼³Á¤ÇÑ´Ù.
8.2 Library ÀÇ ÇÁ·ÎÁ§Æ® ¼³Á¤ #
- [ Project Settings ] ( Alt + F7 ) â¿¡¼ Library ÀÇ [ Link ] ÅÇÀ» ¼±ÅÃÇÑ´Ù. [ General ] Category ÀÇ [ Output file name ] ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
../Example/Debug/Library.dll
- [ Post-build step ] ÅÇ¿¡¼ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
copy Debug\Library.lib ..\Example\Debug
8.3 Example ÀÇ ÇÁ·ÎÁ§Æ® ¼³Á¤ #
- [ Project Settings ] â¿¡¼ Example ÀÇ [ Link ] ÅÇÀ» ¼±ÅÃÇÑ´Ù. [ General ] Category ÀÇ [ Object/library modules ] ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
Library.lib
- [ Link ] ÅÇÀÇ [ Input ] Category ¿¡¼ [ Additional library path ] ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
Debug