DLL
DLLÀº µ¿Àû ¸µÅ©¸¦ »ç¿ëÇÏ¿© ½ÇÇà½Ã¿¡ ÇÔ¼ö°¡ Á¤ÇØÁø´Ù.
»ç¿ë Ä«¿îÆ®(usage count)¶ó´Â °ÍÀ» ÅëÇØ »ç¿ë½Ã¿¡ Ä«¿îÆ®°¡ Áõ°¡Çϰí Á¾·á½Ã¿¡ Ä«¿îÆ®°¡ °¨¼ÒµÈ´Ù.
»ç¿ëµÈ DLLÆÄÀÏÀ» ãÀ»¶§ ¸ÕÀú
1. Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÇ µð·ºÅ丮
2. ÇÁ·Î±×·¥ÀÇ ÇöÀç µð·ºÅ丮
3. À©µµ¿ìÁîÀÇ ½Ã½ºÅÛ µð·ºÅ丮
4. ¿øµµ¿ìÁî ½Ã½ºÅÛ µð·ºÅ丮
5. PATH ȯ°æ º¯¼ö°¡ ÁöÁ¤ÇÏ´Â ¸ðµç µð·ºÅ丮
¼ø¼·Î ã´Â´Ù. DLL(µ¿Àû ¸µÅ©)ÀÇ ÀåÁ¡
¼±¾ð
__declspec (extended-attribute) declarator
ÇÔ¼ö¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â ¼±¾ð¹®
extended-attribute
thread TLS(thread local storage)µ¥ÀÌÅÍ·Î ÁöÁ¤ ÇÑ´Ù. ÀÌ ÁöÁ¤ÀÚ°¡ ºÙÀº º¯¼ö´Â ÇØ´ç ½º·¹µå¿¡¼¸¸ »ç¿ë °¡´ÉÇÏ´Ù.
naked Á¢µÎ(prolog), Á¢¹Ì(epilog)¸¦ »ý¼º ½ÃŰÁö ¾Ê´Â´Ù. ¾î¼Àºí¸® ¾ð¾î¸¦ »ç¿ëÇÏ¿© Á÷Á¢ Á¢µÎ, Á¢¹Ì¸¦ ´Þ°íÀÚ ÇÒ¶§ »ç¿ëÇÑ´Ù.
°¡»ó µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ÀÛ¼ºÇÒ¶§ ÀÌ ±â¾ï ºÎ·ù¸¦ »ç¿ëÇÑ´Ù. ÇÔ¼ö¿¡¸¸ Àû¿ëµÇ¸ç º¯¼ö¿¡´Â Àû¿ë µÇÁö ¾Ê´Â´Ù.
dllimport DLL¿¡ ÀÖ´Â µ¥ÀÌÅÍ, ¿ÀºêÁ§Æ®, ÇÔ¼ö¸¦ ÀÓÆ÷Æ® ÇÑ´Ù. DLL¿¡ ÀÖ´Â ÀÌ·¸°Ô »ý±ä ÇÔ¼ö¸¦ ¾ÕÀ¸·Î »ç¿ëÇϰڴٴ ¼±¾ðÀÌ´Ù.
dllexport DLL¿¡ ÀÖ´Â µ¥ÀÌÅÍ, ¿ÀºêÁ§Æ®, ÇÔ¼ö¸¦ ¿¢½ºÆ÷Æ® ÇÑ´Ù. DLLÀ» »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®(½ÇÇàÆÄÀÏÀ̰ųª ¶Ç´Â DLL)¿¡°Ô DLLÀÇ Á¤º¸
¸¦ ¸í½ÃÀûÀ¸·Î Á¦°øÇÏ´Â ¿ªÈ°À» ÇÑ´Ù.
extern "C"
C++ÀÇ ¾ð¾îÀÇ Æ¯¼º»ó ¿À¹ö·Îµå¿Í °°Àº °æ¿ì ´Ù¸¥ ¾ð¾î¿¡´Â ¾ø´Â Ư¼ºÀÌ´Ù. ÀÌ¿Í °°Àº C++ÀÌ °ø°³ÇÏ´Â ÇÔ¼ö Á¤º¸¸¦ mangled nameÀ̶ó°í Çϴµ¥
À§ÀÇ ¼±¾ðÀº mangled nameÀ» »ç¿ëÇÏÁö ¾Ê¾Æ ´Ù¸¥ ¾ð¾î¿¡¼µµ »ç¿ëÇÏ°Ô Çϰڴٴ ¼±¾ðÀÌ´Ù.
¿¬°á
¹¬½ÃÀû ¿¬°á
¹¬ÁöÀû ¿¬°áÀº ÇÔ¼ö°¡ ¾î´À DLLÆÄÀÏ¿¡ ÀÖ´ÂÁö ¾Ë¸®Áö ¾Ê°í »ç¿ëµÈ´Ù. ÇÁ·ÎÁ§Æ®¿¡ ÀÓÆ÷Æ® ¶óÀ̺귯¸®¸¦ Æ÷ÇÔÇØ ÁÖ¾î¾ß Çϸç À©µµ¿ìÁî´Â
ÀÓÆ÷Æ®¶óÀ̺귯¸®ÀÇ Á¤º¸¸¦ ÂüÁ¶ÇÏ¿© ¾Ë¾Æ¼ DLLÀ» ·ÎµåµÇ¾î ÀÖÀ¸¸é »ç¿ëÄ«¿îÆ®¸¦ Áõ°¡½ÃŰ´Â ¹æ½ÄÀ¸·Î Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§
DLLÀÌ ·ÎµåµÇ¹Ç·Î ½ÇÇà½Ã ¿¬°á(Load time Linking)À̶ó°í ÇÑ´Ù.
¸í½ÃÀû ¿¬°á
¾î´À DLL¿¡ ÀÖ´Â ÇÔ¼öÀÎÁö¸¦ ¹àÈ÷°í »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ DLLÀ» ·ÎµåÇÏ´Â°Ô ¾Æ´Ï¶ó DLLÀ» ·ÎµåÇØ¾ßÇÒ ¸í·ÉÀÌ
ÀÖÀ»¶§ ·ÎµåµÈ´Ù. ÇÊ¿äÇÒ ¶§ ¼±ÅÃÀûÀ¸·Î DLLÀ» ·ÎµåÇϹǷΠ»óȲ¿¡ µû¸¥ ¸®¼Ò½º ±³Ã¼°¡ °¡´ÉÇÏ´Ù. DLLÀÇ À̸§À» ¹àÈ÷°í »ç¿ëÇϹǷΠÀÓÆ÷Æ®
¶óÀ̺귯¸®´Â ºÒÇÊ¿äÇÏ´Ù. Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ DLLÀÌ ¸Þ¸ð¸®·Î ÀÐÇôÁö¹Ç·Î ½ÇÇàÁß ¿¬°á(Run time Linking)À̶ó°í ÇÑ´Ù.
HINSTANCE LoadLibrary(LPCTSTR lpLibFileName);
»ç¿ëÇϰíÀÚ ÇÏ´Â DLLÀ» ¸Þ¸ð¸®¿¡ Àоî¿Í ÇöÀç ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸® ¿µ¿ª¿¡ DLLÀ» ¸ÅÇνÃÄÑ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖµÇ ÀÌ¹Ì ¸Þ¸ð¸®¿¡ ¿Ã¶ó¿Í ÀÖ´Â
»óŶó¸é »ç¿ë Ä«¿îÆ®¸¸ Áõ°¡ ½ÃŲ´Ù. Àμö·Î´Â ÀаíÀÚ ÇÏ´Â Àμö¸¦ ³Ö¾îÁØ´Ù. °æ·Î¸¦ ³Ö¾îÁÖÁö ¾Ê´Â ÆíÀÌ ¹Ù¶÷Á÷Çϰí È®ÀåÀÚ¸¦ »ý·«Çϸé
µðÆúÆ®·Î .DLLÀ» »ç¿ëÇÑ´Ù.
FARPROC GetProcAddress(
HMODULE hModule, // DLL ¸ðµâ ÇÚµé
LPCSTR lpProcName // ÇÔ¼ö À̸§À̰ųª ÇÔ¼öÀÇ ¼ø¼°ª(ordinal value)ÀÌ´Ù.
);
DLL¿¡¼ ¿¢½ºÆ÷Æ®ÇÑ ÇÔ¼öÀÇ ¹øÁö¸¦ ã¾Æ ±× ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇØ ÁØ´Ù. ÇÚµéÀÌ ¹«È¿Çϰųª ¿¡·¯ ¹ß»ý½Ã NULLÀ» ¸®ÅÏÇÑ´Ù.
BOOL FreeLibrary(HMODULE hLibModule); // DLL ¸ðµâ ÇÚµé
DLLÀÇ »ç¿ë Ä«¿îÆ®¸¦ °¨¼Ò ½ÃŲ´Ù. Ä«¿îÆ®°¡ 0ÀÌ µÇ¸é ¸Þ¸ð¸®¿¡¼ DLLÀ» »èÁ¦ÇÑ´Ù. ¿¡·¯ ¹ß»ý½Ã´Â FALSE¸¦ ¹ÝȯÇÑ´Ù.