Dynamic Link Library Programming
 FrontPage|FindPage|TitleIndex|RecentChanges|UserPreferences E D R S P I M H RSS

Data TypesDeadReckoningDesign Patterns For GameDirect3D Programming with MFCDirectPlay Programming › DllProgramming
<!> UnderConstruction

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 ¿Í ºñ±³ #


1.2 DLL ÀÇ ÀåÁ¡ #



2 °ü·Ã¼­Àû #


  • Windows API Á¤º¹
    • ±è»óÇü Àú, °¡³²»ç
  • GAME PROGRAMMING Gems 2
    • Mark Deloura ¿Ü °øÀú, ·ù±¤ ¿ª, Á¤º¸¹®È­»ç

3 Áֿ丵ũ #


4 DLL Programming ½ÃÀÛÇϱâ #


4.1 DLL ¿¡ ´ëÇÑ ¹è°æÁö½Ä #


  • ÇÔ¼ö¸¦ Á¦°øÇÏ´Â DLL ¿¡¼­´Â ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ °ø°³ÇÑ´Ù. ÀÌ °úÁ¤À» Export ¶ó°í ÇÑ´Ù.
  • ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡¼­´Â ¾î¶² ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ú´Ù°í ¼±¾ðÇϸç ÀÌ °úÁ¤À» Import ¶ó°í ÇÑ´Ù.

  • ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸´Â ´ÙÀ½°ú °°Àº ¼±¾ð¹®À¸·Î Á¦°øÇÑ´Ù.
    __declspec ( extended-attribute ) declarator
    

    ÀÎ ¼ö¼³ ¸í
    dllimport DLL ¿¡ ÀÖ´Â µ¥ÀÌŸ, ¿ÀºêÁ§Æ®, ÇÔ¼ö¸¦ Import ÇÑ´Ù.
    ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥¿¡¼­ ¼±¾ðÇÑ´Ù.
    dllexport DLL ¿¡ ÀÖ´Â µ¥ÀÌŸ, ¿ÀºêÁ§Æ®, ÇÔ¼ö¸¦ Export ÇÑ´Ù.
    ÇÔ¼ö¸¦ Á¦°øÇÏ´Â DLL ¿¡¼­ ¼±¾ðÇÑ´Ù.

  • __declspec ¹®Àº ¿ÀºêÁ§Æ®³ª ÇÔ¼ö, µ¥ÀÌŸÀÇ ±â¾ïºÎ·ù ( Storage Class ) ¸¦ ÁöÁ¤ÇÏ´Â ÁöÁ¤Àڷμ­ DLL ÀÇ Á¤º¸ °ø°³´Â ´ÙÀ½°ú °°Àº ÁöÁ¤ÀÚ¸¦ »ç¿ëÇÑ´Ù.
    ¾ð¾îÁöÁ¤ÀÚºñ°í
    C ¾ð¾î extern "C"
    C++ ¾ð¾î extern È®ÀåÇü

  • ¿ÜºÎ·Î °ø°³µÇ´Â ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸´Â C ¾ð¾î¿Í C++ ¾ð¾îÀÇ °æ¿ì °¢°¢ ´Ù¸£°Ô Àû¿ëµÈ´Ù.
    1. extern "C" ÁöÁ¤ÀÚ´Â C ¾ð¾î Çü½ÄÀ¸·Î ÇÔ¼ö¸¦ °ø°³ÇÏ¸ç ´Ù¸¥ ¾ð¾î ( C, ÆÄ½ºÄ® µî ) ¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù.
    2. extern ÁöÁ¤ÀÚ´Â C++ ¾ð¾î Çü½ÄÀ¸·Î ÇÔ¼ö³ª Ŭ·¡½º¸¦ °ø°³ÇϹǷΠC++ ÀÇ Æ¯¼ºÀ» »ç¿ë °¡´ÉÇÏ´Ù. ±×·¯³ª ´Ù¸¥ ¾ð¾î¿¡¼­´Â »ç¿ëÀÌ ºÒ°¡´ÉÇÏ´Ù.

  • ÇÔ¼ö¸¦ export ³ª import ÇÒ ¶§´Â ´ÙÀ½°ú __declspec ¿Í extern "C" ¸¦ °°ÀÌ ¼±¾ðÇÑ´Ù.
    extern "C" __declspec(dllexport) ÇÔ¼ö ¿øÇü;
    extern "C" __declspec(dllimport) ÇÔ¼ö ¿øÇü;
    

4.2 DLL ÆÄÀÏ °Ë»ö ¼ø¼­ #


  1. Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ Æ÷ÇÔµÈ µð·ºÅ丮
  2. ÇÁ·Î±×·¥ÀÇ ÇöÀç µð·ºÅ丮
  3. À©µµ¿ìÁîÀÇ ½Ã½ºÅÛ µð·ºÅ丮
  4. À©µµ¿ìÁî µð·ºÅ丮
  5. PATH ȯ°æ º¯¼ö°¡ ÁöÁ¤ÇÏ´Â ¸ðµç µð·ºÅ丮

5 DLL °ú ÇÁ·Î±×·¥ÀÇ ¿¬°á #


5.1 ¹¬½ÃÀû ¿¬°á #


Implicit Link

5.2 ¸í½ÃÀû ¿¬°á #


Explicit Link

5.3 ¿¡·¯Ã³¸® #



6 DLL Programming #


6.1 DllMain ÇÔ¼ö #


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 µð¹ö±ë #



7 DLL ¿¹Á¦ ( È®ÀåÇü ) #


7.1 Çì´õ ÆÄÀÏ #


 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 ¿¡¼­ ¶óÀ̺귯¸®¿Í ÇÁ·Î±×·¥À» °°ÀÌ °³¹ßÇÒ °æ¿ì ´ÙÀ½°ú °°ÀÌ ÇÁ·ÎÁ§Æ®°¡ ±¸¼ºµÉ °ÍÀÌ´Ù.

Programming/DLL/Dll_Example.gif

ÀÌ·± °æ¿ì, ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¼³Á¤ÇÏ°Ô µÇ¸é Æí¸®ÇÏ°Ô ÇÁ·Î±×·¥À» °³¹ßÇÒ ¼ö ÀÖ´Ù.

8.1 ÇÁ·ÎÁ§Æ®ÀÇ Á¾¼Ó °ü°è ¼³Á¤ #


[ Project ] ¸Þ´º¿¡¼­ [ Dependencies... ] ¸¦ ¼±ÅÃÇÏ¿© Library ÇÁ·ÎÁ§Æ®¸¦ Example ÇÁ·ÎÁ§Æ®¿¡ Á¾¼ÓµÇµµ·Ï ¼³Á¤ÇÑ´Ù.

Programming/DLL/Dll_Dependency.gif

8.2 Library ÀÇ ÇÁ·ÎÁ§Æ® ¼³Á¤ #


  1. [ Project Settings ] ( Alt + F7 ) â¿¡¼­ Library ÀÇ [ Link ] ÅÇÀ» ¼±ÅÃÇÑ´Ù. [ General ] Category ÀÇ [ Output file name ] ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
    ../Example/Debug/Library.dll
    

  2. [ Post-build step ] ÅÇ¿¡¼­ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
    copy Debug\Library.lib ..\Example\Debug
    

8.3 Example ÀÇ ÇÁ·ÎÁ§Æ® ¼³Á¤ #


  1. [ Project Settings ] â¿¡¼­ Example ÀÇ [ Link ] ÅÇÀ» ¼±ÅÃÇÑ´Ù. [ General ] Category ÀÇ [ Object/library modules ] ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
    Library.lib
    

  2. [ Link ] ÅÇÀÇ [ Input ] Category ¿¡¼­ [ Additional library path ] ¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
    Debug
    



SubCategoryCpp

EditText|FindPage|DeletePage|LikePages| Valid XHTML 1.0! Valid CSS! powered by MoniWiki