ÀÌ ³ëÆ® Mfcxx.dllÀ» »ç¿ë ÇÏ ¿© ¹æ¹ý°ú MFCxxD.DLL (¿©±â¼ x´Â MFC ¹öÀü ¹øÈ£) °øÀ¯ µ¿Àû ¿¬°á ¶óÀ̺귯¸® MFC ÀÀ¿ë ÇÁ·Î±×·¥ ¹× È®Àå Dll¿¡ ¼³¸í ÇÕ´Ï´Ù. ÀÏ¹Ý Dll¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ À¥ »çÀÌÆ®¸¦ ÂüÁ¶ ÇϽʽÿÀ »ç¿ë ÇÏ ¿© MFC DLLÀÇ ÀÏȯÀ¸·Î¡£
ÀÌ ±â¼ú ³ëÆ® DllÀÇ ¼¼ °¡Áö Ãø¸éÀ» ´Ù·ì´Ï´Ù. ¸¶Áö¸· µÎ °³ÀÇ ´õ ¸¹Àº °í±Þ »ç¿ëÀÚ¸¦ À§ÇÑ:
(ÀÌ Á¤±Ô DLL ¶ó°í) ºñ MFC ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â MFC¸¦ »ç¿ë ÇÏ ¿© DLLÀ» ÀÛ¼º ÇÏ´Â µ¥ °ü½ÉÀÌ ÀÖ´Ù¸é, ±â¼ú Âü°í 11 ÂüÁ¶ ÇϽʽÿÀ¡£
MFCxx.DLL Áö¿øÀÇ °³¿ä: ¿ë¾î ¹× ÆÄÀÏ
Á¤±Ô DLL: ÀÏ¹Ý DLLÀ» »ç¿ë ÇÏ ¿© MFC Ŭ·¡½º Áß ÀϺθ¦ »ç¿ë ÇÏ ¿© µ¶¸³ ½ÇÇàÇü DLL ºôµå. ¾ÖÇà ¸® ÄÉÀÌ ¼Ç/DLL °æ°è ÀÎÅÍÆäÀ̽º´Â "C" ÀÎÅÍÆäÀ̽º¿Í Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥À» MFC ÀÀ¿ë ÇÁ·Î±×·¥ Çʿ䰡 ¾ø½À´Ï´Ù.
ÀÌ MFC 1.0¿¡¼ Áö¿ø DLL Áö¿øÀÇ ¹öÀüÀÔ´Ï´Ù. ±â¼ú Âü°í 11 ¹× MFC °í±Þ °³³ä »ùÇÿ¡¼ ¼³¸í ÇÏ´Â DLLTRACE¡£
¸Þ¸ðnbsp;??Visual c + +ÀÇ ¹öÀü 4.0, ¿ë¾î USRDLL ¿À·¡ À̸ç Á¤ÀûÀ¸·Î MFC¿¡ ¸µÅ© ÇÏ´Â ±âº» DLL¿¡ ÀÇÇØ ´ëü µÇ¾ú½À´Ï´Ù. ¶ÇÇÑ µ¿ÀûÀ¸·Î MFC¿¡ ¸µÅ© ÇÏ´Â ±âº» DLLÀ» ±¸ÃàÇÒ ¼ö ÀÖ½À´Ï´Ù(&N).
MFC 3.0 (±×¸®°í À§ÀÇ) ÀÏ¹Ý Dll OLE ¹× µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¸¦ ºñ·Ô ÇÑ ¸ðµç »õ·Î¿î ±â´É Áö¿ø¡£
AFXDLL: À̰ÍÀº ¶ÇÇÑ ¶ó°íµµ MFC ¶óÀ̺귯¸®ÀÇ °øÀ¯ ¹öÀü. À̰ÍÀº MFC 2.0¿¡ Ãß°¡ µÈ »õ DLL Áö¿ø ÀÌ´Ù. MFC ¶óÀ̺귯¸® ÀÚü´Â ´Ù¾ç ÇÑ Dll (¾Æ·¡ ¼³¸í ÂüÁ¶) ¹× Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ ¶Ç´Â DLL ÇÊ¿äÇÑ DllÀ» µ¿ÀûÀ¸·Î ¸µÅ© ÇÕ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥/DLL °æ°è ÀÎÅÍÆäÀ̽º´Â C + + MFC Ŭ·¡½º ÀÎÅÍÆäÀ̽º. Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡´Â MFC ÀÀ¿ë ÇÁ·Î±×·¥ À̾î¾ß ÇÕ´Ï´Ù. ¸ðµç MFC 3.0 ±â´É Áö¿ø (¿¹¿Ü: À¯´ÏÄÚµå µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¿¡ ´ëÇØ Áö¿ø µÇÁö ¾Ê½À´Ï´Ù)¡£
¸Þ¸ðnbsp;??Visual c + + ¹öÀü 4.0ÀÇÀÌ À¯ÇüÀÇ DLL ¶ó°í "È®Àå DLL."(&N)
ÀÌ ³ëÆ® MFCxx.DLL »ç¿ë ÇÏ ¿© MFC DLL ÁýÇÕÀ» Æ÷ÇÔ ÇÏ´Â Àüü ÂüÁ¶:
¸Þ¸ðnbsp;??MFCSxx [U] [D]ÀÔ´Ï´Ù.LIB ¶óÀ̺귯¸®¿¡¼ »ç¿ë ÇÏ´Â °øÀ¯ Dll¿¡¼ MFC¿Í ÇÔ²². ÀÌ·¯ÇÑ ¶óÀ̺귯¸® ÀÀ¿ë ÇÁ·Î±×·¥ ¶Ç´Â DLL¿¡ Á¤ÀûÀ¸·Î ¿¬°á ÇØ¾ß ÇÏ´Â Äڵ带 Æ÷ÇÔ(&N)¡£
ÇØ´ç °¡Á®¿À±â ¶óÀ̺귯¸®¸¦ ÀÀ¿ë ÇÁ·Î±×·¥ ¸µÅ©:
"MFC È®Àå DLL" Mfcxx.dllÀ» ±â¹ÝÀ¸·Î ÇÏ´Â DLL (¶Ç´Â ´Ù¸¥ MFC °øÀ¯ Dll). ¿©±â MFC ±¸¼º ¿ä¼Ò ¾ÆÅ°ÅØÃ³¿¡¼ ¹ß Â÷±â. MFC Ŭ·¡½º¿¡¼ ÆÄ»ý ÇÏ´Â À¯¿ëÇÑ Å¬·¡½º ¶Ç´Â ´Ù¸¥ MFC °°Àº µµ±¸ ŰƮ¸¦ ±¸Ãà ÇÏ´Â °æ¿ì DLL¿¡ ¹èÄ¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±Ã±ØÀûÀΠŬ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥Àº DLL·Î Mfcxx.dllÀ» »ç¿ë ÇÑ´Ù. ÀÌ·¸°Ô Çϸé Àç»ç¿ë °¡´ÉÇÑ ¸®ÇÁ Ŭ·¡½º, Àç»ç¿ë °¡´ÉÇÑ ±âº» Ŭ·¡½º¿Í ¹®¼ º¸±â/Àç»ç¿ë °¡´ÉÇÑ Å¬·¡½º¡£
¸Þ¸ðnbsp;??±×°ÍÀº ÀÀ¿ë ÇÁ·Î±×·¥ MFC/OLE, µ¥ÀÌÅͺ£À̽º ¶Ç´Â ³×Æ®¿öÅ· Ŭ·¡½º¸¦ °¢°¢ »ç¿ë ÇÏÁö ¾Ê´Â °æ¿ì MFCOxx [U] D, D [U] MFCDxx, ¶Ç´Â MFCNxx [U] D µð¹ö±× ¶óÀ̺귯¸®¿Í ¸µÅ© ÇÏ´Â µ¥ ÇÊ¿äÇÑ(&N)¡£
ÀåÁ¡ ¹× ´ÜÁ¡
¿Ö MFCÀÇ °øÀ¯ ¹öÀüÀ» »ç¿ë ÇØ¾ß?
¿Ö ÇÏÁö »ç¿ë ÇØ¾ß MFCÀÇ °øÀ¯ ¹öÀü:
MFC È®Àå DLL MFC Ŭ·¡½ºÀÇ ±â´ÉÀ» ³½ ÀÛ¼º ÇÔ¼ö¿Í Ŭ·¡½º¸¦ Æ÷ÇÔ ÇÏ´Â DLLÀÔ´Ï´Ù. OLE ¹× µ¥ÀÌÅͺ£À̽º µð¹ö±× Áö¿ø (MFCOxxD.DLL, MFCDxxD.DLL) DllÀº MFC È®Àå DllÀÇ ¿¹ Mfcxxd.dllÀ» »ç¿ë. MFC È®Àå DLL °øÀ¯ MFC DllÀ» »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥ ¸î °¡Áö Ãß°¡ °í·Á »çÇ×À¸·Î ±×°ÍÀ» »ç¿ë ÇÏ ¿© °°Àº ¹æ½ÄÀ¸·Î:
ÀÌ·¯ÇÑ °í·Á »çÇ×Àº ¾Æ·¡ ´õ ÀÚ¼¼ÇϰԿ¡¼ ¼³¸í µÇ¾î ÀÖ½À´Ï´Ù. ¶ÇÇÑ MFC °í±Þ °³³ä »ùÇÃÀ» ÂüÁ¶ ÇØ¾ß DLLHUSK º¸¿©ÁÝ´Ï´Ù ÀÌÈÄ
Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ ¹× È®Àå Dll Mfcxx.dllÀÇ µ¿ÀÏÇÑ ¹öÀüÀ» »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù. MFC DLL ±ÔÄ¢À» µû¸£°í ¸ðµÎ µð¹ö±×¸¦ Á¦°ø ÇØ¾ß ÇÏ °í ¼Ò¸Å (/ ¸±¸®½º) È®Àå DLLÀÇ ¹öÀü. ÀÌ·¸°Ô Çϸé ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ µð¹ö±× ¹öÀü°ú ÀÏ¹Ý Á¤Ç° ¹öÀüÀ» ±¸Ãà ÇÏ °í ÀûÀý ÇÑ µð¹ö±× ¶Ç´Â ÀÏ¹Ý Á¤Ç° ¹öÀüÀÇ ¸ðµç Dll ¿¬°áÀ» Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥¡£
¸Þ¸ðnbsp;??C + + À̸§ ¸Í±Û¸µ ¹× ³»º¸³»±â ¹®Á¦¸¦ ÀÎÇØ È®Àå DLL¿¡¼¿¡¼ ³»º¸³»±â ¸ñ·Ï ´Ù¸¥ Ç÷§Æû¿¡ ´ë ÇÑ Dll°ú °°Àº DLLÀÇ µð¹ö±× ¹öÀü°ú ÀÏ¹Ý Á¤Ç° ¹öÀü °£¿¡ ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ¼Ò¸Å Mfcxx.dll¿¡ ¾à 2000 ³»º¸³½ Ç׸ñ Æ÷ÀÎÆ®; µð¹ö±× Mfcxxd.dll°¡ ¾à 3000 ³»º¸³½ ÁøÀÔÁ¡(&N)¡£
¸Þ¸ð¸® °ü¸®¿¡ ´ë ÇÑ ºü¸¥ Âü°í
¸Þ¸ð¸® °ü¸® ","ÀÌ ±â¼ú ³ëÆ®ÀÇ ³¡ ±Ùó ¼½¼Ç MFCÀÇ °øÀ¯ ¹öÀü Mfcxx.dllÀÇ ±¸ÇöÀ» ¼³¸í ÇÕ´Ï´Ù. ´ÜÁö È®Àå DLLÀ» ±¸Çö ÇÏ´Â °ÍÀ» ¾Ë°í ÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¤º¸´Â ¿©±â¿¡¼ ¼³¸í¡£
MFCxx.DLL ¹× Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ÁÖ¼Ò °ø°£¿¡ ·Îµå ÇÏ´Â ¸ðµç È®Àå Dll °°Àº ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ¸¶Ä¡ µ¿ÀÏÇÑ ¸Þ¸ð¸® ÇÒ´çÀÚ, ¸®¼Ò½º ·Îµù ¹× ±âŸ MFC "Àü¿ª" »óÅ »ç¿ë µË´Ï´Ù. ºñ MFC DLL ¶óÀ̺귯¸®¿Í Á¤ÀûÀ¸·Î MFC¿¡ ¸µÅ© ÇÏ´Â ±âº» Dll Á¤È®È÷ ¹Ý´ë ÇÏ °í ÀÖ´Ù °¢ DLL ÀÚü ¸Þ¸ð¸® Ç®ÀÇ ÇÒ´ç Çϱ⠶§¹®¿¡ À̰ÍÀº Áß¿ä ÇÑ¡£
È®Àå DLLÀÌ ¸Þ¸ð¸®¸¦ ÇÒ´ç ÇÏ´Â °æ¿ì ¸Þ¸ð¸®¸¦ ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ÇÒ´ç µÈ °³Ã¼¿Í ÇÔ²² È¥ÇÕÇÒ ÀÚÀ¯·Ó°Ô ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ, °øÀ¯ MFC ¶óÀ̺귯¸®¸¦ »ç¿ë ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Ãæµ¹ ÇÏ´Â °æ¿ì ¿î¿µ üÁ¦ÀÇ º¸È£ °øÀ¯ DLL ´Ù¸¥ MFC ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¹«°á¼º À¯Áö µË´Ï´Ù.
´Ù¸¥ "Àü¿ª" MFC »óÅ¿¡¼ ¸®¼Ò½º ·Îµå¸¦ ÇöÀç ½ÇÇà ÆÄÀÏ Ã³·³ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ ¹× ¸ðµç MFC È®Àå Dll·Î ÀÚü MFCxx.DLL °£¿¡ °øÀ¯ µÇ´Â ¸¶Âù°¡Áö·Î¡£
È®Àå DLLÀ» ±¸Ãà
Appwizard¸¦ »ç¿ë ÇÏ ¿© MFC È®Àå DLL ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù ±×¸®°í ±×°ÍÀº ÀÚµ¿À¸·Î ÀûÀý ÇÑ ÄÄÆÄÀÏ·¯¿Í ¸µÄ¿ ¼³Á¤À» »ý¼º µË´Ï´Ù. ±×°ÍÀº ¶ÇÇÑ ¼öÁ¤ÇÒ ¼ö ÇÏ´Â DllMain ÇÔ¼ö¸¦ »ý¼º Çß´Ù¡£
MFC È®Àå DLL¿¡ ±âÁ¸ ÇÁ·ÎÁ§Æ®¸¦ º¯È¯ ÇÏ´Â °æ¿ì MFCÀÇ °øÀ¯ ¹öÀüÀ» »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸Ãà Çϱâ À§ÇÑ Ç¥ÁØ ±ÔÄ¢ ½ÃÀÛ ÈÄ ´ÙÀ½ ½ÇÇà:
Çì´õ ÆÄÀÏ º¯°æ
È®Àå DLL ¸ñÀûÀº ÀϹÝÀûÀ¸·Î ÇØ´ç ±â´ÉÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â Çϳª ÀÌ»óÀÇ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¸î °¡Áö ÀϹÝÀûÀÎ ±â´ÉÀ» ³»º¸³¾ÀÔ´Ï´Ù. ÀÌ Å¬·¡½º ¹× Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â Àü¿ª ÇÔ¼ö ³»º¸³»±â ±Í°á¡£
ÀÌ·¸°Ô ÇÏ·Á¸é °¢ ¸â¹ö ÇÔ¼ö °¡Á®¿À±â ¶Ç´Â ³»º¸³»±â ÀûÀý ÇÑ °Í ó·³ Ç¥½Ã µË´Ï´Ù ÀÖ´ÂÁö È®ÀÎ ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ Æ¯º° ÇÑ ¼±¾ðÀÌ ÇÊ¿ä: __declspec (dllexport) ¹× __declspec(dllimport). Ŭ·¡½º¸¦ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ »ç¿ë ÇÏ´Â °æ¿ì __declspec(dllimport)À¸·Î ¼±¾ðÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. È®Àå DLL ÀÚü¸¦ ºôµåÇÒ ¶§ __declspec (dllexport)·Î ¼±¾ð ÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, ±â´É ÇØ¾ß ÇÕ´Ï´Ù ½ÇÁ¦·Î ³»º¸³¾ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ ·Îµå ½Ã ±×µé¿¡ ¹ÙÀεùÇÒ ¼ö ÀÖµµ·Ï¡£
Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â AFX_EXT_CLASS ¸¦ »ç¿ë ÇÏ ¿© Ŭ·¡½º Á¤ÀÇ¿¡. ÀÌ ¸ÅÅ©·Î __declspec (dllexport) À¸·Î _AFXDLL ¹× _AFXEXT ¸¦ Á¤ÀÇ ÇÏÁö¸¸ _AFXEXT °¡ Á¤ÀÇ µÇÁö ¾ÊÀº °æ¿ì __declspec(dllimport) ·Î Á¤ÀÇ ÇÏ´Â °æ¿ì ÇÁ·¹ÀÓ ¿öÅ©¿¡ ÀÇÇØ Á¤ÀÇ µË´Ï´Ù. _AFXEXT À§¿¡¼ ¼³¸íÇÑ ´ë·Î Á¤ÀÇ È®Àå DLLÀ» ºôµåÇÒ ¶§. ¿¹¸¦ µé¾î:
aFX_EXT_CLASS CExampleExport Ŭ·¡½º: °ø¿ë CObject
{... Ŭ·¡½º Á¤ÀÇ...}
¾Æ´Ï¶ó Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â
¹æ±Ý °³º° ÇÊ¿äÇÑ Å¬·¡½ºÀÇ ¸â¹ö¸¦ ±ÍÇÏÀÇ ¼öÃâÀ» ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, CDialog¸¦ ³»º¸³»´Â-ÆÄ»ý Ŭ·¡½º¸¦¸¸ »ý¼ºÀÚ¿Í DoModal È£Ãâ ³»º¸³»¾ß ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¸â¹ö´Â DLLÀ» »ç¿ë ÇÏ ¿© ³»º¸³¾ ¼ö ÀÖ½À´Ï´Ù.DEF ÆÄÀÏÀ» ÇÏÁö¸¸ ´ç½ÅÀº ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù AFX_EXT_CLASS ¸¹ÀÌ ³»º¸³»¾ß ÇÒ °³º° ±¸¼º¿ø¿¡ ´ëÇØ µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î¡£
¿¹¸¦ µé¾î:
cExampleDialog Ŭ·¡½º: public CDialog
{
°ø°³:
nbsp; AFX_EXT_CLASS CExampleDialog();
? AFX_EXT_CLASS int DoModal();
? / / Ŭ·¡½º Á¤ÀÇÀÇ ³ª¸ÓÁö
? .
? .
? .
}(&N)
ÀÌ·¸°Ô Çϸé Ŭ·¡½ºÀÇ ¸ðµç ¸â¹ö¸¦ ´õ ÀÌ»ó ³»º¸³»·Á´Â ÀÖ´Ù´Â »ç½Ç ¶§¹®À¸·Î Ãß°¡ ¹®Á¦¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. ¹®Á¦´Â MFC ¸ÅÅ©·Î ÀÛµ¿ ¹æ½Ä¿¡¼ ÀÌ´Ù. ´Ù¾ç ÇÑ MFCÀÇ µµ¿ì¹Ì ¸ÅÅ©·Î ½ÇÁ¦·Î ¼±¾ð Çϰųª µ¥ÀÌÅÍ ¸â¹ö¸¦ Á¤ÀÇ ÇÕ´Ï´Ù. µû¶ó¼ ÀÌ·¯ÇÑ µ¥ÀÌÅÍ ¸â¹ö¸¦ DLL¿¡¼ ³»º¸³¾ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù.
¿¹¸¦ µé¾î, DECLARE_DYNAMIC ¸ÅÅ©·Î°¡ Á¤ÀÇ µË´Ï´Ù °°ÀÌ È®Àå DLLÀ» ºôµåÇÒ ¶§:
# define DECLARE_DYNAMIC(class_name) \
º¸È£ µÈ: \
nbsp; Á¤Àû CRuntimeClass * ÆÄ½ºÄ® _GetBaseClass(); \
? °ø°ø: \
? Á¤Àû AFX_DATA CRuntimeClass Ŭ·¡½º # # class_name; \
? °¡»ó CRuntimeClass * GetRuntimeClass() const; \(&N)
"Á¤Àû AFX_DATA" ½ÃÀÛ ÇÏ´Â ÁÙÀº Ŭ·¡½º ³»ºÎÀÇ Á¤Àû °³Ã¼¸¦ ¼±¾ð ÇÏ °í ÀÖ´Ù. ÀÌ Å¬·¡½º¸¦ ¿Ã¹Ù¸£°Ô ³»º¸³»°í Ŭ¶óÀÌ¾ðÆ®¿¡¼ ·±Å¸ÀÓ Á¤º¸¿¡ ¾×¼¼½º.EXEÀÌ Á¤Àû °³Ã¼¸¦ ¼öÃâ ÇØ¾ß ÇÕ´Ï´Ù. Á¤Àû °³Ã¼´Â AFX_DATAÇÑÁ¤ÀÚ·Î ¼±¾ð µÈ, ¶§¹®¿¡ Çϸé AFX_DATA ¸¦ DLLÀ» ºôµåÇÒ ¶§ __declspec (dllexport) À» Á¤ÀÇ ÇÏ °í ±ÍÇÏÀÇ Å¬¶óÀÌ¾ðÆ® ½ÇÇà ÆÄÀÏÀ» ºôµåÇÒ ¶§ __declspec(dllimport) ·Î Á¤ÀÇ¡£
À§¿¡¼ ¼³¸í Çß µíÀÌ AFX_EXT_CLASS ÀÌ¹Ì ÀÌ·± ¹æ½ÄÀ¸·Î Á¤ÀÇ µË´Ï´Ù. ±×·¡¼ ±×³É ´Ù½Ã AFX_DATA AFX_EXT_CLASS ¿Í µ¿ÀÏ Å¬·¡½º Á¤ÀÇ ÁÖÀ§¿¡ Çʿ䡣
¿¹¸¦ µé¾î:
nbsp;??# undef AFX_DATA
? # define AFX_DATA¸¦ AFX_EXT_CLASS
? CExampleView Ŭ·¡½º: °ø¿ë CView
? {
??? DECLARE_DYNAMIC()
??? / /... Ŭ·¡½º Á¤ÀÇ...
? };
? # undef AFX_DATA
? # define AFX_DATA(&N)
MFC´ÂÀÌ ±â¼úÀº ÀÌ·¯ÇÑ ¸ðµç ½Ã³ª¸®¿À¿¡ ´ëÇØ ÀÛµ¿ ÇÏ¹Ç·Î ÇØ´ç ¸ÅÅ©·Î ³»¿¡¼ Á¤ÀÇ ÇÏ´Â µ¥ÀÌÅÍ Ç׸ñ¿¡ Ç×»ó AFX_DATA ±âÈ£¸¦ »ç¿ë ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î DECLARE_MESSAGE_MAP ¿¡ ´ë ÇÑ ÀÛµ¿¡£
¸Þ¸ðnbsp;??Á¤Àû µ¥ÀÌÅÍ ¸â¹ö°¡ ÀÚµ¿À¸·Î ³»º¸³»Áý´Ï´Ù Ŭ·¡½ºÀÇ ¸â¹ö¸¦ ¼±ÅÃÇÑ ¾Æ´Ï¶ó Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â °æ¿ì(&N)¡£
DECLARE_SERIAL ¹× IMPLEMENT_SERIAL ¸ÅÅ©·Î »ç¿ë Çϴ Ŭ·¡½º¿¡ ´ë ÇÑ CArchive ÃßÃâ ¿¬»êÀÚ¸¦ ÀÚµ¿À¸·Î ³»º¸³»·Á¸é µ¿ÀÏÇÑ ±â¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Ŭ·¡½º ¼±¾ðÀ» °ýÈ£·Î ¹±â ¿© ¾ÆÄ«ÀÌºê ¿¬»êÀÚ¸¦ ³»º¸³À´Ï´Ù (¿¡ À§Ä¡ ÇÕ´Ï´Ù.H ÆÄÀÏ) ´ÙÀ½ ÄÚµå¿Í:
# undef AFX_API
# define AFX_API AFX_EXT_CLASS
lt; ¿©±â¿¡ ±ÍÇÏÀÇ Å¬·¡½º ¼±¾ðÀ» >
# undef AFX_API
# define AFX_API
_AfxextÀÇ Á¦ÇÑ »çÇ×
È®Àå DllÀÇ ¿©·¯ ·¹À̾ ÇÏÁö ¾Ê¾Æµµ È®Àå Dll¿¡ ´ë ÇÑ _AFXEXT pre-processor ±âÈ£¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. È®Àå Dll È£Ãâ ¶Ç´Â ÀÚ½ÅÀÇ È®Àå Dll MFC Ŭ·¡½º¿¡¼ ÆÄ»ý ÇÑ ´ÙÀ½ Ŭ·¡½º¿¡¼ ÆÄ»ý ÇÏ´Â °æ¿ì ¸ðÈ£¼ºÀ» ÇÇÇϱâ À§ÇØ »ç¿ëÀÚ °íÀ¯ÀÇ Àü󸮱⠱âÈ£¸¦ »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù.
¹®Á¦´Â w i n 32¸¦ ¸í½ÃÀûÀ¸·Î ¼±¾ð ÇØ¾ß ÇÕ´Ï´Ù ¸ðµç µ¥ÀÌÅÍ __declspec (dllexport) À¸·Î DLL¿¡¼ °¡Á®¿Ã ¼ö ÀÖÀ¸¸é DLL ¹× __declspec(dllimport) ¿¡¼ ³»º¸³¾ °æ¿ì ÀÌ´Ù. _AFXEXT¸¦ Á¤ÀÇÇÒ ¶§ MFC Çì´õ AFX_EXT_CLASS ¿Ã¹Ù¸£°Ô Á¤ÀÇ µÇ¾ú´ÂÁö È®ÀΡ£
¿©·¯ °³ÀÇ ·¹À̾ ÀÖÀ» ¶§ AFX_EXT_CLASS °°Àº ÇϳªÀÇ ±âÈ£ ÃæºÐ ÇÏÁö ¾Ê½À´Ï´Ù, ¶§¹®¿¡ È®Àå DLL ¼ö ÀÖ½À´Ï´Ù »õ Ŭ·¡½º¸¦ ³»º¸³¾ »Ó¸¸ µÉ ¶Ç ´Ù¸¥ È®Àå DLL¿¡¼¿¡¼ ´Ù¸¥ Ŭ·¡½º¸¦ °¡Á®¿Ã. ÀÌ ¹®Á¦¸¦ ó¸® Çϱâ À§ÇØ DLLÀ» »ç¿ë ÇÏ ¿© ´ë DLL ÀÚü¸¦ ±¸Ãà ÇÏ´Â ³ªÅ¸³»´Â Ưº° ÇÑ pre-processor ±âÈ£¸¦ »ç¿ë ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µÎ °³ÀÇ È®Àå Dll, A.DLL, B.DLL »ó»ó. ±×µéÀº °¢°¢ A.H¿Í B.H, ÀϺΠŬ·¡½º¸¦ °¢°¢ ³»º¸³À´Ï´Ù. B.DLLÀº A.DLL¿¡¼ Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù. Çì´õ ÆÄÀÏ ÀÌ·±½ÄÀ¸·Î »ý°åÀ» °Í ÀÌ´Ù:
/ / A.H
# ifdef A_IMPL
nbsp; # define CLASS_DECL_A __declspec (dllexport)
# else
? # define CLASS_DECL_A __declspec(dllimport)
# endif
CLASS_DECL_A CExampleA Ŭ·¡½º: °ø¿ë CObject
{... Ŭ·¡½º Á¤ÀÇ...};
/ / B.H
# ifdef B_IMPL
? # define CLASS_DECL_B __declspec (dllexport)
# else
? # define CLASS_DECL_B __declspec(dllimport)
# endif
CLASS_DECL_B CExampleB Ŭ·¡½º: °ø¿ë CExampleA
{... Ŭ·¡½º Á¤ÀÇ...}(&N)
/D A_IMPL¿Í ÇÔ²² ±¸Ãà ÇÏ °í A.DLLÀÌ ºôµåµÉ ¶§¿Í ±×°ÍÀº /D B_IMPL³»Àå B.DLLÀÌ ºôµåµÉ ¶§. °¢ DLL¿¡ ´ëÇØ º°µµ ±âÈ£¸¦ »ç¿ë ÇÏ ¿© Cexampleb´Â ³»º¸³»°í CExampleA B.DLLÀ» ºôµåÇÒ ¶§ °¡Á®¿Â. Cexamplea´Â A.DLLÀ» ºôµåÇÒ ¶§ ³»º¸³»°í °¡Á®¿À´Â B.DLL (¶Ç´Â ´Ù¸¥ Ŭ¶óÀ̾ðÆ®)¿¡¼ »ç¿ë ÇÏ´Â °æ¿ì¡£
³»Àå AFX_EXT_CLASS ¿Í _AFXEXT pre-processor ±âÈ£¸¦ »ç¿ë ÇÏ´Â °æ¿ì ÀÌ·¯ÇÑ À¯ÇüÀÇ ·¹ÀÌ¾î ¸µÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. À§¿¡¼ ¼³¸í ÇÏ´Â ±â¼úÀ» ¹æ½ÄÀ¸·Î ¾È ´Þ¸® OLE, µ¥ÀÌÅͺ£À̽º ¹× ³×Æ®¿öÅ© È®Àå DllÀ» ºôµåÇÒ ¶§ MFC ÀÚü ¸ÞÄ¿´ÏÁòÀ» »ç¿ë ÇÏ ¿©ÀÌ ¹®Á¦¸¦ ÇØ°á¡£
¾Æ´Ï¶ó Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â
´Ù½Ã Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â ÇÏÁö ¶§ Ưº° ÇÑ ÁÖÀÇ ÇØ¾ß ÇÕ´Ï´Ù. MFC ¸ÅÅ©·Î¿¡¼ ¸¸µç ÇÊ¿äÇÑ µ¥ÀÌÅÍ Ç׸ñÀÌ ¿Ã¹Ù¸£°Ô ³»º¸³¾ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. AFX_DATA ¸¦ ƯÁ¤ Ŭ·¡½ºÀÇ ¸ÅÅ©·Î¿¡ ´Ù½Ã ¿©ÀÌ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¾ðÁ¦ µç Áö Àüü Ŭ·¡½º¸¦ ³»º¸³»´Â ÇÏÁö ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù¡£
¿¹¸¦ µé¾î:
/ / A.H
# ifdef A_IMPL
nbsp; # define CLASS_DECL_A _declspec(dllexport)
# else
? # define CLASS_DECL_A _declspec(dllimport)
? # endif
# undef AFX_DATA
# define AFX_DATA CLASS_DECL_A
CExampleA Ŭ·¡½º: °ø¿ë CObject
{
? DECLARE_DYNAMIC()
? CLASS_DECL_A int SomeFunction();
? //class Á¤ÀÇ ÇÕ´Ï´Ù.
? .
? .
};
# undef AFX_DATA
# define AFX_DATA(&N)
DllMain
´ÙÀ½Àº È®Àå DLL¿¡ ´ë ÇÑ ±âº» ¼Ò½º ÆÄÀÏ¿¡ ¹èÄ¡ ÇØ¾ß ÇÏ´Â Á¤È®ÇÑ ÄÚµåÀÔ´Ï´Ù. ±×°ÍÀº Ç¥ÁØ Æ÷ÇÔ ÈÄ¿Í ¾ß ÇÑ´Ù. ±× Appwizard¸¦ »ç¿ë ÇÏ ¿© È®Àå DLL¿¡ ´ë ÇÑ ½ÃÀÛ ÆÄÀÏÀ» ¸¸µé ¶§ Á¦°ø DllMain ¿¡ ´ë ÇÑ Âü°í¡£
# include "afxdllx.h"
Á¤Àû AFX_EXTENSION_MODULE extensionDLL;
extern "C" int APIENTRY DllMain (HINSTANCE hInstance, DWORD dwReason, LPVOID)
{
nbsp; °æ¿ì (dwReason DLL_PROCESS_ATTACH = =)
? {
???? / / È®Àå DLL ÃʱâÈ if (!AfxInitExtensionModule (
??????????? extensionDLL, hInstance))
??????? 0; ¹Ýȯ
/ / TODO: ¿©±â¿¡ ´Ù¸¥ ÃʱâÈ ÀÛ¾÷À» ¼öÇà
? }
? else if (dwReason DLL_PROCESS_DETACH = =)
? {
???? / / È®Àå DLL ´ç ÇÁ·Î¼¼½º Á¾·á
???? AfxTermExtensionModule(extensionDLL);
/ / TODO: ¿©±â¿¡ ´Ù¸¥ Á¤¸® ÀÛ¾÷À» ¼öÇà
? }
? ¹Ýȯ 1;?? / / È®ÀÎ
}(&N)
CDynLinkLibrary °³Ã¼°¡ ¸¸µé¾îÁú ¶§ AfxInitExtensionModule À» È£Ãâ »Ó¸¸ ¾Æ´Ï¶ó, ³ªÁß¿¡ »ç¿ë Çϱâ À§ÇØ ÇØ´ç °³Ã¼ ÆÑÅ͸® (COleObjectFactory °³Ã¼) ¸ðµâ ·±Å¸ÀÓ Å¬·¡½º (CRuntimeClass ±¸Á¶Ã¼)À» ĸóÇÕ´Ï´Ù. (¼±Åà »çÇ×) È£Ãâ AfxTermExtensionModule ÀÖ°Ô MFC Á¤¸® È®Àå DLL °¢ ÇÁ·Î¼¼½º (¾î¶² ÇÁ·Î¼¼½º°¡ Á¾·á ¶Ç´Â DLLÀÌ ·Îµå FreeLibrary È£ÃâÀÇ °á°ú·Î ¹ß»ý)À» ºÐ¸® ÇÏ´Â °æ¿ì È®Àå DLL¿¡¼¿¡¼. ÀÌÈÄ ´ëºÎºÐÀÇ È®Àå DllÀ» µ¿ÀûÀ¸·Î ·Îµå µÇÁö ¾Ê½À´Ï´Ù (ÀϹÝÀûÀ¸·Î, ±×µéÀº ±×µéÀÇ °¡Á®¿À±â ¶óÀ̺귯¸®¸¦ ÅëÇØ ¿¬°á µÈ), AfxTermExtensionModule À» È£Ãâ ÀϹÝÀûÀ¸·Î ÇÊ¿ä ÇÏÁö ¾Ê½À´Ï´Ù¡£
ÀÀ¿ë ÇÁ·Î±×·¥ ·Îµå ÇÏ °í µ¿ÀûÀ¸·Î È®Àå Dll ÇØÁ¦ ÇÏ´Â °æ¿ì Ç¥½Ã above.nbsp;·Î AfxTermExtensionModule À» È£Ãâ ÇØ¾ß ¶ÇÇÑ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ´ÙÁß ½º·¹µå¸¦ »ç¿ë ÇÏ´Â °æ¿ì (Win32 ÇÔ¼ö LoadLibrary ¹× FreeLibrary)´Â ´ë½Å AfxLoadLibrary ¹× AfxFreeLibrary ¸¦ »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù. È®Àå DLL ·Îµå ÇÏ °í ¾ð·ÎµåÇÒ ¶§ ½ÇÇà ½ÃÀÛ ¹× Á¾·á Äڵ尡 Àü¿ª MFC »óÅ ¼Õ»ó µÇÁö ¾Ê½À´Ï´Ù ÁöŰ´Â AfxLoadLibrary ¹× AfxFreeLibrary ¸¦ »ç¿ë ÇÏ ¿©(&N)¡£
Çì´õ ÆÄÀÏ AFXDLLXÀÔ´Ï´Ù.È®Àå Dll, AFX_EXTENSION_MODULE ¹× CDynLinkLibrary ¿¡ ´ë ÇÑ Á¤ÀÇ µî¿¡¼ »ç¿ë µÇ´Â ±¸Á¶¿¡ ´ë ÇÑ Æ¯º° ÇÑ defintions¸¦ Æ÷ÇÔ ÇÏ´Â H¡£
±Û·Î¹ú extensionDLL °ú °°ÀÌ ¼±¾ð ÇØ¾ß ÇÕ´Ï´Ù. 16 ºñÆ® ¹öÀüÀÇ MFC¿Í ´Þ¸® ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ¹× MFC ±â´ÉÀ» È£Ãâ ÇÏ´ÂÀÌ ½Ã°£ µ¿¾È MFCxx.DLL DllMain À» È£Ãâ ÇÏ´Â ½Ã°£¿¡ ÀÇÇØ ¿ÏÀüÈ÷ ÃʱâÈ µÇ±â ¶§¹®¡£
¸®¼Ò½º ¹× Ŭ·¡½º °øÀ¯
°£´ÜÇÑ MFC È®Àå Dll Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ ¹× ¾Æ¹«°Íµµ ´õ ¸¹Àº ¸î °¡Áö ³·Àº ´ë¿ªÆø ÇÔ¼ö¸¦ ³»º¸³¾¸¸ ÇÊ¿ä ÇÕ´Ï´Ù. ´õ ¸¹Àº »ç¿ëÀÚ-ÀÎÅÍÆäÀ̽º ÁýÁß Dll Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¸®¼Ò½º ¹× c + + Ŭ·¡½º¸¦ ¼öÃâ ÇϰíÀÚ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸®¼Ò½º ³»º¸³»±â´Â ¸®¼Ò½º ¸ñ·ÏÀ» ÅëÇØ ¼öÇà µË´Ï´Ù. °¢ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ CDynLinkLibrary °³Ã¼ÀÇ ´Üµ¶À¸·Î ¸µÅ© µÈ ¸ñ·ÏÀÌÀÔ´Ï´Ù. ¸®¼Ò½º ·Îµå ¸®¼Ò½º ÇöÀç ¸®¼Ò½º ¸ðµâ (AfxGetResourceHandle)¿¡¼ ù ¹øÂ° º¸À̴ ǥÁØ MFC ±¸ÇöÀÇ ´ëºÎºÐÀ» ã°í ±×¸®°í °æ¿ì ¿äû µÈ ¸®¼Ò½º¸¦ ·Îµå ÇÏ·Á°í ½Ãµµ ÇÏ´Â CDynLinkLibrary °³Ã¼ ¸ñ·Ï ãÀ» ¼ö ¾ø½À´Ï´Ù µµº¸¡£
C + + Ŭ·¡½º À̸§À» ÁöÁ¤ ÇÏ´Â c + + °³Ã¼ÀÇ µ¿Àû »ý¼ºÀÌ ºñ½ÁÇÕ´Ï´Ù. MFC °³Ã¼ deserialization ¸ÞÄ¿´ÏÁò ¸ðµç CRuntimeClass °³Ã¼¸¦ ÀÌÀü¿¡ ÀúÀå µÈ ¹«½¼¿¡ µû¶ó ÇÊ¿äÇÑ Çü½ÄÀÇ c + + °³Ã¼¸¦ µ¿ÀûÀ¸·Î ¸¸µé¾î¼ À籸¼ºÇÒ ¼ö ÀÖµµ·Ï µî·ÏÀ» ÇÒ Çʿ䰡¡£
DECLARE_SERIAL´Â È®Àå DLLÀÇ¿¡¼ Ŭ·¡½º¸¦ »ç¿ë ÇÏ ¿© Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥À» ¿øÇÏ´Â °æ¿ì¿¡ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Ç¥½Ã µÇµµ·Ï Ŭ·¡½º¸¦ ³»º¸³¾ °ÍÀÔ´Ï´Ù ÇØ¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ ÀÌ·¸°Ô °È°í CDynLinkLibrary ¸ñ·Ï¡£
MFC °í±Þ °³³ä »ùÇÃÀÇ °æ¿ì DLLHUSK, ¸ñ·ÏÀ» ´ÙÀ½°ú °°Àº
¸Ó¸®-gt; ? DLLHUSKÀÔ´Ï´Ù.EXE-¶Ç´Â-DLLHUSKÀÔ´Ï´Ù.EXE
????????????? |????????????????????? |
???????? TESTDLL2ÀÔ´Ï´Ù.DLL TESTDLL2.DLL
????????????? |????????????????????? |
???????? TESTDLL1ÀÔ´Ï´Ù.DLL TESTDLL1.DLL
????????????? |????????????????????? |
????????? MFCO42DÀÔ´Ï´Ù.DLL??????????????? |
????????????? |????????????????????? |
????????? MFCD42DÀÔ´Ï´Ù.DLL??????????????? |
????????????? |????????????????????? |
?????????? MFC42DÀÔ´Ï´Ù.DLL MFC42.DLL(&G)
Mfcxx.dllÀº ´ë°³ ¸®¼Ò½º ¹× Ŭ·¡½º ¸ñ·ÏÀÇ ¸¶Áö¸·. Mfcxx.dll¿¡´Â ¸ðµç Ç¥ÁØ ¸í·É Id¿¡ ´ë ÇÑ ÇÁ·ÒÇÁÆ® ¹®ÀÚ¿À» ºñ·Ô ÇÏ ¿© Ç¥ÁØ MFC ¸®¼Ò½ºÀÇ ¸ðµç Æ÷ÇÔ µË´Ï´Ù. Dll°ú Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÏÁö ¾Ê´Â Çã¿ë ¸ñ·ÏÀÇ ²¿¸®¿¡ ¹èÄ¡´Â¿¡ ÀÇÁ¸ Mfcxx.dllÀÇ °øÀ¯ ¸®¼Ò½º ´ë½Å ÇÏÁö¸¸ Ç¥ÁØ MFC ¸®¼Ò½ºÀÇ ÀÚü º¹»çº»¡£
¸®¼Ò½º ¹× ¸ðµç DllÀÇ Å¬·¡½º À̸§À» Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ³×ÀÓ ½ºÆäÀ̽º¿¡ º´ÇÕ ´ÜÁ¡Àº ¾î¶² Id¸¦ Á¶½É ÇØ¾ß ÇÏ´Â ¶Ç´Â À̸§À» ¼±Åà ÇϰíÀÖ´Ù. ¹°·Ð ÇÏÁö Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¸®¼Ò½º ¶Ç´Â CDynLinkLibrary °³Ã¼¸¦ ³»º¸³»±â ÇÏ ¿©ÀÌ ±â´ÉÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù. DLLHUSK »ùÇà ¿©·¯ Çì´õ ÆÄÀÏÀ» »ç¿ë ÇÏ ¿© °øÀ¯ ¸®¼Ò½º À̸§ °ø°£À» °ü¸® ÇÕ´Ï´Ù. °øÀ¯ ¸®¼Ò½º ÆÄÀÏ »ç¿ë¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ µµ¿ò¸»¿¡ ´ë ÇÑ ±â¼ú ³ëÆ® 35 ÂüÁ¶¡£
DLL ÃʱâÈ
À§¿¡¼ ¼³¸í Çß µíÀÌ ÀϹÝÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥À» ±ÍÇÏÀÇ ¸®¼Ò½º ¹× Ŭ·¡½º¸¦ ³»º¸³¾ ÇÏ·Á¸é CDynLinkLibrary °³Ã¼¸¦ ¸¸µå´Â ¿øÇÒ °ÍÀÔ´Ï´Ù. DLLÀ» ÃʱâÈ ÇÏ´Â ³»º¸³½µÈ ÁøÀÔÁ¡À» Á¦°ø ÇØ¾ß ÇÕ´Ï´Ù. ÃÖ¼ÒÇÑÀÌ Àμö¸¦ »ç¿ë ÇÏ °í ¾Æ¹«°Íµµ ¹Ýȯ void ·çƾ ÇÏÁö¸¸ ´ç½Å ó·³ ¾Æ¹«°Íµµ µÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¹æ¹ýÀ» »ç¿ë ÇÏ´Â °æ¿ì °¢ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ DLLÀ» »ç¿ë ÇÏ °í ½Í¾îÀÌ ÃʱâÈ ·çƾÀ» È£Ãâ ÇØ¾ß ÇÕ´Ï´Ù. ¼ö ¶ÇÇÑ ÇÒ´çÀÌ CDynLinkLibrary °³Ã¼ DllMain ¿¡¼ AfxInitExtensionModule À» È£Ãâ Á÷ÈÄ¡£
ÃʱâÈ ·çƾÀÇ ÇöÀç ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Èü, È®Àå DLL Á¤º¸¸¦ À¯¼±¿¡¼ CDynLinkLibrary °³Ã¼¸¦ ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÀÌ ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù.:
extern "C" extern ¹«È¿ WINAPI InitXxxDLL()
{
nbsp; »õ·Î¿î CDynLinkLibrary(extensionDLL);
}(&N)
ÀÏ»óÀûÀÎ À̸§,ÀÌ ¿¹Á¦¿¡¼ InitXxxDLL ´Â ´ç½ÅÀÌ ¿øÇÏ´Â ¹«¾ùÀÌ µç µÉ ¼ö ÀÖ½À´Ï´Ù. µÉ Çʿ䰡 ¾ø½À´Ï´Ù extern ¡°C¡± , ÇÏÁö¸¸ ÇÏ °í ±×·¸°Ô ÇÏ °Ô À¯Áö Çϱâ À§ÇØ ½±°Ô ³»º¸³»±â ¸ñ·Ï¡£
¸Þ¸ðnbsp;??±ÍÇÏÀÇ È®Àå ÀÏ¹Ý DLL¿¡¼ DLLÀ» »ç¿ë ÇÏ´Â °æ¿ì¿¡ÀÌ ÃʱâÈ ÇÔ¼ö¸¦ ³»º¸³»¾ß ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÀÏ¹Ý DLL¿¡¼ È®Àå DLL Ŭ·¡½º ¶Ç´Â ¸®¼Ò½º¸¦ »ç¿ë Çϱâ Àü¿¡ È£Ãâ ÇØ¾ß ÇÕ´Ï´Ù(&N).
Ç׸ñ ³»º¸³»±â
Ŭ·¡½º¸¦ ³»º¸³»´Â °£´ÜÇÑ ¹æ¹ýÀ» °¢ Ŭ·¡½º ¹× Àü¿ª ÇÔ¼ö¸¦ ³»º¸³¾ __declspec(dllimport) ¿Í __declspec (dllexport)À» »ç¿ë ÇÏ´Â °ÍÀÔ´Ï´Ù. À̰ÍÀ» ÈξÀ ´õ ½±°Ô ¸¸µç´Ù ÇÏÁö¸¸ ´ú ´ú Á¦¾î ±â´ÉÀº ¹«¾ù ¾òÀ» ³»º¸³½ ÇÔ¼ö¸¦ ¼ ¼ö·Î ³»º¸³¾ ¼ö ¾ø½À´Ï´Ù ÀÌÈÄ °¢ ÁøÀÔÁ¡ (¾Æ·¡ ¼³¸í ÂüÁ¶)¸¦ ¸í¸í ÇÏ´Â °Í º¸´Ù È¿À²ÀûÀÔ´Ï´Ù. À̰ÍÀº TESTDLL1 ¹× TESTDLL2 ÀÚ½ÅÀÇ Ç׸ñÀ» ³»º¸³»´Â µ¥ »ç¿ë ÇÏ´Â ¹æ¹ý¡£
´õ È¿À²ÀûÀÎ ¹æ¹ý (Mfcxx.dll¿¡ ÀÇÇØ »ç¿ë µÇ´Â ¹æ¹ý) ÀÌ¸ç °¢ Ç׸ñÀ» ¸í¸í ÇÏ ¿© °¢ Ç׸ñÀ» Á÷Á¢ ¼öÃâ ÇÏ °í ÀÖ½À´Ï´Ù.DEF ÆÄÀÏÀÔ´Ï´Ù. ÀÌÈÄ ¿ì¸®ÀÇ DLL (Áï, ¸ðµç)¿¡¼ ¼±ÅÃÀû ¼öÃâÀ» ³»º¸³»´Â ¿ì¸®°¡ ¿ì¸®°¡ ¿ì¸®°¡ ¼öÃâ ÇϰíÀÚ Çϴ ƯÁ¤ ÀÎÅÍÆäÀ̽º¸¦ °áÁ¤ ÇØ¾ß ÇÕ´Ï´Ù. À̰ÍÀº ¾î·Á¿î Ç׸ñ ÇüÅ·Π¸Í±Û¸µµÈ À̸§À» ¸µÄ¿¿¡ ÁöÁ¤ ÇØ¾ß ÇÕ´Ï´Ù ÀÌÈÄ ÇÕ´Ï´Ù.DEF ÆÄÀÏÀÔ´Ï´Ù. ´ç½ÅÀÌ Á¤¸»·Î ±×°Í¿¡ ´ë ÇÑ ½Éº¼¸¯ ¸µÅ©°¡ ÇÊ¿ä ÇÏÁö ¾ÊÀ¸¸é c + + Ŭ·¡½º¸¦ ³»º¸³»Áö ¸¶½Ê½Ã¿À¡£
¸¸¾à ´ç½ÅÀÌ ½Ãµµ¿Í Ŭ·¡½º c + +¸¦ ³»º¸³»±â´Â.DEF ÆÄÀÏ Àü¿¡ÀÌ ¸ñ·ÏÀ» ÀÚµ¿À¸·Î »ý¼º ÇÏ´Â µµ±¸¸¦ °³¹ß ÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù µÎ ´Ü°è ¿¬°á ÇÁ·Î¼¼½º¸¦ »ç¿ë ÇÏ ¿©. ¾Æ´Ï ¼öÃâÀ¸·Î ¹ø DLL¿¡ ¿¬°á ÇÏ °í ¸µÄ¿¸¦ »ý¼ºÇÒ ¼ö ÀÖµµ·Ï ÇÑ.¸Ê ÆÄÀÏÀÔ´Ï´Ù. ÇÕ´Ï´Ù.¸Ê ÆÄÀÏ »ý¼ºÀ» ³»º¸³½ ÇÔ¼ö ¸ñ·Ï ÀϺΠÁ¶ÀÛ ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¿¡ ´ë ÇÑ ³»º¸³»±â Ç׸ñÀ» »ý¼º ÇÏ µ¥ ¼ö ÀÖ½À´Ï´Ù ±ÍÇÏÀÇ.DEF ÆÄÀÏÀÔ´Ï´Ù. (ºñ·Ï ±×°ÍÀº ¿ÏÀüÈ÷ ÀÚµ¿ Æ©´× µ¿¾È¿¡ ÇÑ ¹ø¾¿ ¸î °¡Áö ¼ÕÀÌ ÇÊ¿ä) °°Àº ÇÁ·Î¼¼½º¿Í ÇÔ²² MFCxx.DLL ¹× OLE, ¼öõ, ¹øÈ£¿¡¼ µ¥ÀÌÅͺ£À̽º È®Àå Dll¿¡ ´ë ÇÑ ³»º¸³»±â ¸ñ·Ï »ý¼º¡£
CWinApp ´ë CDynLinkLibrary
MFC È®Àå DLLÀº CWinAppÀÖÁö ¾Ê½À´Ï´Ù-ÆÄ»ý µÈ °³Ã¼´Â ÀÚ½ÅÀÇ; ´ë½Å CWinApp¿Í ÇÔ²² ÀÛ¾÷À» ÇØ¾ß ÇÕ´Ï´Ù-Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °³Ã¼¸¦ ÆÄ»ý ÇÕ´Ï´Ù. Áï, Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ±âº» ¸Þ½ÃÁö ÆßÇÁ, À¯ÈÞ ·çÇÁ¸¦ ¼ÒÀ¯¡£
MFC È®Àå DLLÀÌ °¢ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ´ë ÇÑ Ãß°¡ µ¥ÀÌÅ͸¦ À¯Áö ÇÏ´Â °æ¿ì¿¡ CDynLinkLibrary ¿¡¼ »õ Ŭ·¡½º¸¦ ÆÄ»ý ÇÏ °í À§ÀÇ ·çƾÀ» ¼³¸í ÇÏ´Â Initxxxdll¿¡ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ½ÇÇà ÇÏ´Â °æ¿ì DLLÀÇ CDynLinkLibrary °³Ã¼´Â ƯÁ¤ È®Àå DLL¿¡ ´ë ÇÑ Çϳª¸¦ ã¾Æ ÇöÀç ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ¸ñ·ÏÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
DLL ±¸Çö¿¡¼ ¸®¼Ò½º¸¦ »ç¿ë ÇÏ ¿©
À§¿¡¼ ¼³¸í Çß µíÀÌ ±âº» ¸®¼Ò½º ºÎÇÏ ÃÖÃÊÀÇ EXE ¶Ç´Â DLL´Â ¿äûÇÑ ¸®¼Ò½º¿¡ ´ë ÇÑ Ã£°í CDynLinkLibrary °³Ã¼ ¸ñ·ÏÀ» °É¾î ³ª°¥ °Í ÀÌ´Ù. ¸ðµç ³»ºÎ ÄÚµå »Ó¸¸ ¾Æ´Ï¶ó ¸ðµç MFC Api AfxFindResourceHandle ¸¦ »ç¿ë ÇÏ ¿© µµº¸ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù ¾Æ¹«¸® ¾î¶² ¸®¼Ò½º¸¦ ãÀ» ¼ö ÀÚ¿ø ¸ñ·Ï¡£
Api¸¦ »ç¿ë ÇÏ´Â °æ¿ì¿¡ ƯÁ¤ Àå¼Ò¿¡¼ ¸®¼Ò½º¸¦ ·Îµå ÇÏ·Á¸é AfxGetResourceHandle ¹× AfxSetResourceHandle ÀÌÀü ÇÚµéÀ» ÀúÀå ÇÏ °í »õ·Î¿î ÇÚµéÀ» ¼³Á¤ ÇÕ´Ï´Ù. Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¹Ýȯ Çϱâ Àü¿¡ ¿À·¡ µÈ ¸®¼Ò½º ÇÚµéÀ» º¹¿ø ÇØ¾ß ÇÕ´Ï´Ù. »ùÇà testdll2ÀÌÀÌ Á¢±ÙÀ» »ç¿ë ÇÏ ¿© ¸í½ÃÀûÀ¸·Î ·Îµå ÇÏ´Â ¸Þ´º¿¡ ´ë ÇÑ¡£
¸ñ·Ï »êÃ¥ ¾à°£ ´À¸³´Ï´Ù ¹× ¸®¼Ò½º ID ¹üÀ§¸¦ °ü¸® ÇØ¾ß ÇÏ´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ¿©·¯ È®Àå Dll¿¡ ¿¬°á Çϴ Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ DLL ÀνºÅϽº ÇÚµéÀ» ÁöÁ¤ ÇÏÁö ¾Ê°íµµ DLL¿¡¼ Á¦°øÇÑ ¸®¼Ò½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù. AfxFindResourceHandle ÀÚ¿ø ¸ñ·ÏÀ» »êÃ¥ ÀÏÄ¡ Çϴ ƯÁ¤µÈ Ç׸ñ¿¡ ´ë ÇÑ º¸°í ÇÏ´Â µ¥ »ç¿ë ÇÏ´Â APIÀÔ´Ï´Ù. À̸§ ¹× ¸®¼Ò½ºÀÇ À¯ÇüÀ» ¼Ò¿ä µÇ °í óÀ½ ¹ß°ß µÈ ¸®¼Ò½º ÇÚµé (¶Ç´Â NULL)À» ¹Ýȯ ÇÕ´Ï´Ù.
ÀÀ¿ë ÇÁ·Î±×·¥ ¿ä±¸ »çÇ×
MFCÀÇ °øÀ¯ ¹öÀüÀ» »ç¿ë ÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¸î °¡Áö °£´ÜÇÑ ±ÔÄ¢À» µû¶ó¾ß ÇÕ´Ï´Ù.:
°³¹ß ȯ°æ ±¸Ãà
´ëºÎºÐ Ç¥ÁØ ±âº»°ªÀÇ ³»ºÎ ¸ÞÀÌÅ©ÆÄÀÏ »ç¿ë ÇÏ´Â °æ¿ì DLL ¹öÀüÀ» ±¸Ãà ÇÏ´Â ÇÁ·ÎÁ§Æ®¸¦ ½±°Ô º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ ´Ü°è´Â NAFXCWD¿Í ¿¬°á µÇ¾î ¿Ã¹Ù¸£°Ô ÀÛµ¿ MFC ÀÀ¿ë ÇÁ·Î±×·¥À» °¡Á¤ ÇÕ´Ï´Ù.(µð¹ö±×)¿¡ ´ë ÇÑ LIB ¹× NAFXCWÀÔ´Ï´Ù.LIB (¼Ò¸Å)¿¡ ´ë ÇÑ ÇÏ·Á¸é MFC ¶óÀ̺귯¸®ÀÇ °øÀ¯ ¹öÀüÀ» »ç¿ë Çϵµ·Ï º¯È¯ ÇÕ´Ï´Ù. Visual c + + ȯ°æ¿¡¼ ½ÇÇà ÇÏ °í ÀÖ°í ³»ºÎ ÇÁ·ÎÁ§Æ® ÆÄÀÏ¡£
NMAKE ºôµù
Visual c + +ÀÇ ¿ÜºÎ ¸ÞÀÌÅ©ÆÄÀÏÀ» ±â´ÉÀ» »ç¿ë ÇÏ´Â ¶Ç´Â Á÷Á¢ NMAKE »ç¿ë ÇÏ´Â °æ¿ì¿¡ ÄÄÆÄÀÏ·¯ ¹× ¸µÄ¿ ¿É¼ÇÀ» Áö¿ø Çϵµ·Ï ¸ÞÀÌÅ©ÆÄÀÏ ÆíÁý ÇØ¾ß
ÇÊ¿äÇÑ ÄÄÆÄÀÏ·¯ Ç÷¡±×:
/ /MD D_AFXDLL
/ D_AFXDLL
Ç¥ÁØ MFC Çì´õ ÇÊ¿äÀÌ ±âÈ£¸¦ Á¤ÀÇÇÒ ¼ö:
/MD
ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ C ·±Å¸ÀÓ ¶óÀ̺귯¸®ÀÇ DLL ¹öÀüÀ» »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù.
´Ù¸¥ ¸ðµç ÄÄÆÄÀÏ·¯ Ç÷¡±×¿¡ µû¶ó MFC ±âº»°ª (¿¹¸¦ µé¾î, _DEBUG µð¹ö±×¿¡ ´ë ÇÑ)¡£
¶óÀ̺귯¸® ¸µÄ¿ ¸ñ·ÏÀ» ÆíÁý ÇÕ´Ï´Ù. NAFXCWD º¯°æ ÇÕ´Ï´Ù.MFCxxD.LIB LIB ¹× NAFXCW º¯°æ ÇÕ´Ï´Ù.LIB¸¦ MFCxx.LIB. MFCOxx[U]D.LIB, MFCDxx[U]D.LIB, ¹× MFCNxx[U]D.LIB ÀûÀý ÇÏ °Ô Ãß°¡ (MFC/OLE, µ¥ÀÌÅͺ£À̽º ¶Ç´Â ³×Æ®¿öÅ· Ŭ·¡½ºÀÇ »ç¿ëÀ» À§ÇÑ Çʼö). LIBC¸¦ ±³Ã¼ ÇÕ´Ï´Ù.MSVCRT¿Í LIB.LIBÀÔ´Ï´Ù. ´Ù¸¥ MFC ¶óÀ̺귯¸®¿Í ÇÔ²² ±×°ÍÀÌ Áß¿ä MFCxxD.LIB Àü¿¡ ¹èÄ¡ µË´Ï´Ù C-·±Å¸ÀÓ ¶óÀ̺귯¸®¡£
¸ðµÎ ´ç½ÅÀÇ ¼Ò¸Å¿¡ /d_afxdllÀ» Ãß°¡ ÇÏ °í µð¹ö±× ¸®¼Ò½º ÄÄÆÄÀÏ·¯ ¿É¼Ç (Çϳª ½ÇÁ¦·Î /r¿Í ¸®¼Ò½º¸¦ ÄÄÆÄÀÏÇÏ´Â) ¼öµµ ÀÖ½À´Ï´Ù. À̰ÍÀº ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀ» MFC Dll¿¡ Á¸Àç ÇÏ´Â ¸®¼Ò½º¸¦ °øÀ¯ ÇÏ ¿© ÀÛÀº¡£
ÈÄ¿¡ ÀÌ·¯ÇÑ º¯°æ ³»¿ëÀÌ Àüü ´Ù½Ã ºôµå´Â Çʿ䡣
»ùÇà ºôµå
¸í·ÉÁÙ¿¡¼ °øÀ¯ ȣȯ NMAKE ¸ÞÀÌÅ©ÆÄÀÏ ¶Ç´Â Visual c + +¿¡¼ MFC »ùÇà ÇÁ·Î±×·¥ÀÇ ´ëºÎºÐÀ» °Ç¼³ µÉ ¼ö ÀÖ´Ù¡£
Mfcxx.dllÀ» »ç¿ë ÇÏ ¿© ÀÌ·¯ÇÑ »ùÇÃÀ» º¯È¯ ÇÏ·Á¸é ·ÎµåÇÒ ¼ö ÇÕ´Ï´Ù.MAK´Â Visual c + +·Î ÆÄÀÏ ¹× À§¿¡¼ ¼³¸íÇÑ ÇÁ·ÎÁ§Æ® ¿É¼ÇÀ» ¼³Á¤ ÇÕ´Ï´Ù. NMAKE ºôµå¸¦ »ç¿ë ÇÏ´Â °æ¿ì ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù "AFXDLL = 1"¿¡ NMAKE ¸í·ÉÁÙ ¹× ±¸Ãà ¿¹Á¤ °øÀ¯ MFC ¶óÀ̺귯¸®¸¦ »ç¿ë ÇÏ ¿© »ùÇá£
MFC °í±Þ °³³ä »ùÇà DLLHUSK MFCÀÇ DLL ¹öÀüÀ» ³»Àå. ÀÌ »ùÇÃÀº »Ó¸¸ ¾Æ´Ï¶ó MFCxx.DLL·Î ¿¬°á µÈ ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸Ãà ÇÏ´Â ¹æ¹ýÀ» º¸¿© ÁÝ´Ï´Ù. ÀÖÁö¸¸ ±×°ÍÀº ¶ÇÇÑÀÌ ±â¼ú ³ëÆ®ÀÇ µÞºÎºÐ¿¡¼ ¼³¸í ÇÏ´Â MFC È®Àå Dll°ú °°Àº MFC DLL ÆÐŰ¡ ¿É¼ÇÀÇ ´Ù¸¥ ±â´ÉÀ» º¸¿© ÁÝ´Ï´Ù.
Æ÷Àå ³ëÆ®
([U] MFCxx DllÀÇ ÀÏ¹Ý Á¤Ç° ¹öÀü.DLL)Àº ÀÚÀ¯·Ó°Ô Àç¹èÆ÷ °¡´É ÇÕ´Ï´Ù. DllÀÇ µð¹ö±× ¹öÀüÀº ÀÚÀ¯·Ó°Ô Àç¹èÆ÷ °¡´É ÇÏ °í ÀÀ¿ë ÇÁ·Î±×·¥ °³¹ß µ¿¾È¿¡ »ç¿ë ÇØ¾ß ÇÑ´Ù¡£
µð¹ö±× Dll µð¹ö±ë Á¤º¸°¡ Á¦°ø µË´Ï´Ù. Visual c + + µð¹ö°Å¸¦ »ç¿ë ÇÏ ¿© DLL ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» ÃßÀûÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸±¸®½º Dll (MFCxx [U].DLL) µð¹ö±ë Á¤º¸¸¦ Æ÷ÇÔ ÇÏÁö ¾Ê´Â¡£
»ç¿ëÀÚ ÁöÁ¤ ¶Ç´Â DllÀ» ´Ù½Ã ÀÛ¼º ÇÏ´Â °æ¿ì ´ÙÀ½ È£Ãâ ÇØ¾ß ±×µéÀÌ ¹º°¡ "MFCxx" The MFC SRC ÆÄÀÏ MFCDLL ¾Æ´Ñ ´Ù¸¥.MAK ºôµå ¿É¼ÇÀ» ¼³¸í ÇÏ °í DLLÀÇ À̸§À» º¯°æ ÇÏ´Â ³í¸®¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù. ÀÌ ±ÔÄ¢Àº MFC/OLE, µ¥ÀÌÅͺ£À̽º ¹× ³×Æ®¿öÅ© MFCOLE¿¡ ÀÇÇØ ¸¸µé¾îÁø ÇÏ´Â Dll¿¡µµ Àû¿ë µË´Ï´Ù.MAK, MFCDBÀÔ´Ï´Ù.MAK, ±×¸®°í MFCNETÀÔ´Ï´Ù.MAK, °¢°¢. ÀÌÈÄ ÀÌ·¯ÇÑ DllÀº ÀáÀçÀûÀ¸·Î ¸¹Àº MFC ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ °øÀ¯ ÆÄÀÏÀÇ À̸§À» º¯°æ ÇÏ´Â °ÍÀº ÇÊ¿äÀÔ´Ï´Ù. »ç¿ëÀÚ ÁöÁ¤ ¹öÀüÀÇ MFC DllÀ» °®´Â ´ëü ±× ½Ã½ºÅÛ¿¡ ¼³Ä¡ µÇ¾î °øÀ¯ MFC DllÀ» »ç¿ë ÇÏ´Â ´Ù¸¥ MFC ÀÀ¿ë ÇÁ·Î±×·¥ Áß´Ü µÉ ¼ö ÀÖ½À´Ï´Ù.
MFC DllÀ» ´Ù½Ã ±ÇÀå µÇÁö ¾Ê½À´Ï´Ù.
´ÙÀ½ ´Ü¿ø¿¡¼´Â MFC DLL (MFCxx.DLL ¹× MFCxxD.DLL) ±¸Çö ÇÏ´Â ¹æ¹ýÀ» ¼³¸í ÇÕ´Ï´Ù. ¿©±â¿¡ ¼¼ºÎ »çÇ×ÀÌ ÀÌÇØ ÇÒ ¸ðµç Áß¿äÀº MFC DLLÀ» »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ¿©±â¿¡ ³»¿ëÀ» MFC È®Àå DLLÀ» ÀÛ¼º ÇÏ´Â ¹æ¹ýÀ» ÀÌÇØ ÇÏ´Â µ¥ ÇʼöÀûÀÔ´Ï´Ù. ÇÏÁö¸¸,ÀÌ ±¸Çö ÀÌÇØ ÀÚ½ÅÀÇ DLLÀ» ÀÛ¼º ÇÏ´Â µ¥ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.
±¸Çö °³¿ä
À§¿¡¼ ¼³¸íÇÑ ´ë·Î MFC DLLÀº MFC È®Àå DLLÀÇ Æ¯º° ÇÑ °æ¿ì Á¤¸». ±×°ÍÀº ¸Å¿ì ¸¹Àº ¸¹Àº Ŭ·¡½º¿¡ ´ë ÇÑ ¼öÃâ. °¡Áö ¸î °¡Áö Ãß°¡ MFC DLL¿¡¼ Á¤±Ô È®Àå DLL º¸´Ù ´õ¿í Ưº° ÇÏ °Ô¡£
Win32´Â ´ëºÎºÐÀÇ ÀÛ¾÷
16 ºñÆ® ¹öÀüÀÇ MFC ÀÀ¿ë ÇÁ·Î±×·¥ ´ç µ¥ÀÌÅÍ ½ºÅà ¼¼±×¸ÕÆ®¿¡ ÀϺΠ80 x 86 ¾î¼Àºí¸® ÄÚµå, ÇÁ·Î¼¼½º ´ç ¿¹¿Ü ÄÁÅØ½ºÆ® ¹× ±âŸ ±â¼ú¿¡ ÀÇÇØ ¸¸µé¾îÁø Ưº° ÇÑ ¼¼±×¸ÕÆ®¸¦ Æ÷ÇÔ ÇÑ Æ¯º° ÇÑ ±â¼ú ¼ö°¡ ÇÊ¿ä ÇÕ´Ï´Ù. Win32 Á÷Á¢ Áö¿ø ÇÁ·Î¼¼½º ´ç µ¥ÀÌÅÍ DLL¿¡´Â ´ç½ÅÀÌ ¿øÇÏ´Â ´ëºÎºÐÀÇ ½Ã°£. °¡Àå ºÎºÐ¿¡ ´ë ÇÑ MFCxx.DLL ´ÜÁö NAFXCWÀÔ´Ï´Ù.LIB´Â DLL¿¡ ÆÐŰÁö ÇÕ´Ï´Ù. MFC ¼Ò½º Äڵ带 º¸¸é µÉ Çʿ䰡 ¸Å¿ì ¸î °¡Áö Ưº° ÇÑ °æ¿ì À̱â _AFXDLL, # ifdef ¸Å¿ì ¸î °¡Áö¸¦ ãÀ» °Å ¾ß. Win32 Windows 3.1 (Win32s ¶ó°íµµ ÇÔ)¸¦ ÇØ°á ÇÏ´Â ±¸Ã¼ÀûÀ¸·Î Çϴ Ưº° ÇÑ °æ¿ì. Win32s MFC DLL ½º·¹µå ·ÎÄà ÀúÀå¼Ò (TLS) ÇÁ·Î¼¼½º ·ÎÄà µ¥ÀÌÅ͸¦ ¾ò±â À§ÇØ Win32 Api »ç¿ë ÇØ¾ß ÇÕ´Ï´Ù ±×·¡¼ Á÷Á¢ Áö¿ø ÇÁ·Î¼¼½º ´ç DLL µ¥ÀÌÅ͸¦ ÇÏÁö ¾Ê½À´Ï´Ù.
¶óÀ̺귯¸® ¼Ò½º, Ãß°¡ ÆÄÀÏ¿¡ ´ë ÇÑ ¿µÇâ
ÀÏ¹Ý MFC Ŭ·¡½º ¶óÀ̺귯¸® ¼Ò½º ¹× Çì´õ¿¡¼ _AFXDLL ¹öÀüÀÇ ¿µÇâÀ» »ó´ëÀûÀ¸·Î »ç¼ÒÇÑÀÔ´Ï´Ù. °Å±â¿¡ Ưº° ÇÑ ¹öÀü ÆÄÀÏ (AFXV_DLL.H) »Ó¸¸ ¾Æ´Ï¶ó Ãß°¡ Çì´õ ÆÄÀÏ (AFXDLL_.H) ÁÖ¿ä AFXWIN Æ÷ÇÔ µÇ¾î ÀÖ½À´Ï´Ù.H Çì´õÀÔ´Ï´Ù. AFXDLL_ÀÔ´Ï´Ù.H Çì´õ¿¡´Â CDynLinkLibrary Ŭ·¡½º ¹× ±âŸ ±¸Çö ¼¼ºÎ _AFXDLL ÀÀ¿ë ÇÁ·Î±×·¥ ¹× MFC È®Àå DllÀÇ Æ÷ÇÔ µË´Ï´Ù. AFXDLLXÀÔ´Ï´Ù.MFC È®Àå Dll (ÀÚ¼¼ÇÑ ³»¿ëÀº À§ÀÇ ÂüÁ¶) ±¸ÃàÀ» À§ÇÑ H Çì´õ¸¦ Á¦°ø Çϴ¡£
MFC SRC¿¡¼ MFC ¶óÀ̺귯¸®¸¦ Á¤±Ô ¼Ò½º _AFXDLL # ifdef ¾Æ·¡ Ãß°¡ Á¶°ÇºÎ ÄÚµå ¸î °¡Áö ÀÖ´Ù. Ãß°¡ ¼Ò½º ÆÄÀÏ (DLLINIT.CPP) Ãß°¡ DLL ÃʱâÈ ÄÚµå ¹× MFCÀÇ °øÀ¯ ¹öÀüÀ» À§ÇØ ´Ù¸¥ Á¢ÂøÁ¦¸¦ Æ÷ÇÔÇÕ´Ï´Ù.
MFCÀÇ °øÀ¯ ¹öÀüÀ» ±¸Ãà Çϱâ À§Çؼ´Â Ãß°¡ ÆÄÀÏÀÌ Á¦°ø µË´Ï´Ù. (¾Æ·¡ ÂüÁ¶ DLLÀ» ÀÛ¼º ÇÏ´Â ¹æ¹ý¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº.)
MFC DLL ºôµå
MFC DLLÀº ÀǵµÀûÀ¸·Î ¾î·Á¿î, ±×·¡¼ µÎ ¹ø »ý°¢ Àç°Ç (¶Ç´Â 3 ¹ø) ±×°ÍÀ» Çϱâ Àü¿¡. MFC DLLÀ» ´Ù½Ã ÀÛ¼º ÇØ¾ß, ´ç½ÅÀº ¸¸¾à ´ç½ÅÀÌ ÀÌÇØ ÀáÀç·Â Æ÷Àå ¹®Á¦ ¹× ¾Æ·¡¿¡¼ ¼³¸í ÇÏ´Â Àç¹èÆ÷ Á¦ÇÑ ¿©ÀüÈ÷ Á¤¸»¡£
MFCDLLÀÔ´Ï´Ù.MAK ÆÄÀÏ CodeView Á¤º¸¿Í µð¹ö±× DLLÀ» ±¸ÃàÇÒ ¿¹Á¤ ÀÌ´Ù:
NMAKE /f mfcdll.mak DEBUG = 1 LIBNAME MYMFC =
MFCDLLÀÔ´Ï´Ù.MAK ÆÄÀÏ CodeView Á¤º¸ ¾øÀÌ ¸±¸®½º DLLÀ» ±¸ÃàÇÒ ¿¹Á¤ ÀÌ´Ù:
NMAKE /f mfcdll.mak DEBUG = 0 LIBNAME MYMFC =
(¸¶Âù°¡Áö·Î, ´ç½ÅÀº MFCOLE »ç¿ëÇÕ´Ï´Ù.MAK, MFCDBÀÔ´Ï´Ù.MAK, ±×¸®°í MFCNETÀÔ´Ï´Ù.MAK MFCOxxD.DLL, MFCDxxD.DLL ¹× MFCNxxD.DLL-MFC/OLE, µ¥ÀÌÅͺ£À̽º ¹× ³×Æ®¿öÅ© Ŭ·¡½º¸¦ Æ÷ÇÔ ÇÏ´Â Dll ºôµå)
ÀÌ Ç¥ÁØ MFCxx.DLL ¹× MFCxxD.DLL À̸§ °¡Áø MFC SRC µð·ºÅ͸®¿¡¼ MFC DLLÀÇ °³ÀÎ ¹öÀüÀ» ±¸ÃàÇÒ ¿¹Á¤ ÀÌ´Ù. »õ DllÀ» »ç¿ë ÇÏ ¿© °æ·Î¿¡ ÀûÀý ÇÑ À§Ä¡¿¡ º¹»ç ÇØ¾ß ÇÕ´Ï´Ù. MFCDLLÀÔ´Ï´Ù.MAK ¸ÞÀÌÅ©ÆÄÀÏ ¶ÇÇÑ °¡Á®¿À±â ¶óÀ̺귯¸® (MFCxx.LIB ¹× MFCxxD.LIB)¸¦ ´Ù½Ã ÀÛ¼º ÇÏ °í Ç¥ÁØ MFC LIB µð·ºÅ͸®¿¡ ¹èÄ¡ ÇÕ´Ï´Ù. ÀÌ ±×·¡¼ ¹Ì¸® MFCxx.LIB ¹× MFCxxD.LIB ¶óÀ̺귯¸®¸¦ ´ëü ÇÏ´Â °Ô µË´Ï´Ù Á¶½É ÇϽʽÿÀ¡£
¼öÁ¤µÈ ¹öÀüÀÇ MFC DLL ¶óÀ̺귯¸®¸¦ Àç¹èÆ÷ ÇϰíÀÚ ÇÏ´Â °æ¿ì´Â MFCDLL¿¡ ÀÖ´Â DLLÀÇ À̸§À» º¯°æ ÇØ¾ß ÇÕ´Ï´Ù.MAK ¸ÞÀÌÅ©ÆÄÀÏ ¹× µÎÀÔ´Ï´Ù.DEF ÆÄÀÏÀÔ´Ï´Ù. ¸ÞÀÌÅ©ÆÄÀÏ MFCDLL¸¦ ÂüÁ¶ ÇϽʽÿÀ.MAK¿¡ ´ë ÇÑ ÀÚ¼¼ÇÑ Á¤º¸¡£
¶óÀ̺귯¸®¸¦ ¼öÁ¤ ÇÏ °í´Â ¼Ò¸Å¸¦ Àç¹èÆ÷ÇÒ ¼ö ÀÖ½À´Ï´Ù (/ ¸±¸®½º) MFCxx.DLL ÀÌ¿ÜÀÇ ´Ù¸¥ À̸§À» º¯°æ ÇÏ´Â °æ¿ì¿¡ ¼öÁ¤ ¶óÀ̺귯¸®. ³»Àå ¶Ç´Â »ç¿ëÀÚ ÁöÁ¤ ±¸ÃàµÈ µð¹ö±× DLLÀÇ µð¹ö±× ¹öÀü Àç¹èÆ÷ ÇÏÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¯ÇÑ Àç¹èÆ÷ Á¦ÇÑÀº ÁÖ·Î ºñÇ¥ÁØÀÇ È®»êÀ» ¹æÁö ÇÏ´Â ÀáÀçÀûÀ¸·Î ¹ÙÀÌ·¯½º¸¦ Æ÷ÇÔ ÇÏ´Â Dll. ÀÌ»óÀûÀ¸·Î ´ç½ÅÀÌ Çʿ䰡 ¾ø½À´Ï´Ù DllÀ» ´Ù½Ã ÀÛ¼º ÇÏ °í ÀڽŰú ±ÍÇÏÀÇ »ç¿ëÀÚ¿¡ ´ë ÇÑ ¸¹Àº ¹®Á¦¸¦ ÇÇÇÒ °Í ÀÌ´Ù ¹Ì¸® MFCxx.DLL Visual c + + Á¦Ç°°ú ÇÔ²² Á¦°ø µÈ ÀÀ¿ë ÇÁ·Î±×·¥À» Àç¹èÆ÷ ÇÏ´Â °æ¿ì¡£
¸Þ¸ð¸® °ü¸®
Mfcxx.dllÀ» »ç¿ë ÇÏ ¿© ÀÀ¿ë ÇÁ·Î±×·¥ MSVCRTxx.DLL, °øÀ¯ C ·±Å¸ÀÓ DLL¿¡¼ Á¦°ø ÇÏ´Â ÀϹÝÀûÀÎ ¸Þ¸ð¸® ÇÒ´çÀÚ¸¦ »ç¿ë ÇÕ´Ï´Ù. ¸ðµÎ ÀÀ¿ë ÇÁ·Î±×·¥, ¸ðµç È®Àå Dll·Î ½º½º·Î MFC DllÀÌ °øÀ¯ ¸Þ¸ð¸® ÇÒ´çÀÚ¸¦ »ç¿ëÇÕ´Ï´Ù. »ç¿ë ÇÏ ¿© ¸Þ¸ð¸® ÇÒ´ç¿¡ ´ë ÇÑ °øÀ¯ DLL, MFC Dll ÀÀ¿ë ÇÁ·Î±×·¥ ¶Ç´Â ¹Ý´ë·Î ÇØÁ¦ ³ªÁß¿¡ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥°ú DLL °°Àº ÇÒ´çÀÚ¸¦ »ç¿ë ÇØ¾ß Çϱ⠶§¹®¿¡ c + + Àü¿ª new ¿¬»êÀÚ ¶Ç´Â ¿¬»êÀÚ »èÁ¦ÇÏÁö ÀçÁ¤ÀÇ ÇØ¾ß ÇÕ´Ï´Ù. µ¿ÀÏÇÑ ±ÔÄ¢ (malloc, realloc, ¹«·á, µîµî.)¿Í °°Àº C ·±Å¸ÀÓ ¸Þ¸ð¸® ÇÒ´ç ·çÆ¾ÀÇ ³ª¸ÓÁö ºÎºÐ¿¡ Àû¿ë¡£
DLL À̸§, ¼ ¼ö ¹× Ŭ·¡½º __declspec (dllexport)
¿ì¸®´Â »ç¿ë ÇÏÁö ¾Ê½À´Ï´Ù¸¦ class c + + ÄÄÆÄÀÏ·¯ÀÇ __declspec (dllexport) ±â´É. ´ë½Å, ¼öÃâÀÇ ¸ñ·Ï (MFCxx.DEF ¹× MFCxxD.DEF) Ŭ·¡½º ¶óÀ̺귯¸® ¼Ò½º¿Í ÇÔ²² Æ÷ÇÔ µË´Ï´Ù. ÀÌ·¯ÇÑ ÁøÀÔÁ¡ (ÇÔ¼ö ¹× µ¥ÀÌÅÍ)ÀÇ ÁýÇÕÀº ¼±Åà ³»º¸³»Áý´Ï´Ù. MFC °³ÀÎ ±¸Çö ÇÔ¼ö ¶Ç´Â Ŭ·¡½º¿Í °°Àº ´Ù¸¥ ±âÈ£¸¦ ³»º¸³»Áö ¾Ê½À´Ï´Ù ¸ðµç ¼öÃâ ¼ °ÅÁÖ ¶Ç´Â ºñ-»óÁÖ À̸§ Å×À̺íÀÇ ¹®ÀÚ¿ À̸§ ¾øÀÌ ÀÇÇØ ¼öÇà µË´Ï´Ù ¡£
»ç¿ë ÇÏ ¿© class __declspec (dllexport) ÀÛÀº DllÀ» ±¸Ãà Çϱâ À§ÇÑ ´ë¾È µÉ ¼ö ÀÖ½À´Ï´Ù ÇÏÁö¸¸ MFC¿Í °°Àº Å« DLLÀÇ °æ¿ì ±âº» ³»º¸³»±â ¸ÞÄ¿´ÏÁò È¿À²¼º°ú ¿ë·® Á¦ÇÑ ¡£
ÀÌ ¸ðµç ¼ö´Ü À̶õ ¿ì¸®°¡ ¸¹Àº ¾çÀÇ ¾à 800 (kbyte ´ÜÀ§) ¸¹Àº ½ÇÇà ŸÇù ¾øÀÌ ·Îµù ¼ÓµµÀº MFCxx.DLL ¸±¸®½º¿¡¼ ±â´ÉÀ» Æ÷ÀåÇÒ ¼ö ÀÖ´Ù. MFCxx.DLL µÆÀ» 100 K Å«ÀÌ ±â¹ýÀÌ µÇÁö »ç¿ë ÇÕ´Ï´Ù.¶ÇÇÑ ÀÌ·¸°Ô ±×°ÍÀÇ ³¡¿¡ Ãß°¡ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ Ãß°¡ÇÒ ¼ö´Â ÀÖ½À´Ï´Ù.DEF ÆÄÀÏÀ» ¼ ¼ö·Î ³»º¸³»±âÀÇ ¼Óµµ ¹× Å©±â È¿À²¼ºÀ» ŸÇù ÇÏÁö ¾Ê°í ´Ü¼ø ¹öÀü °ü¸®¸¦ Çã¿ë ÇÕ´Ï´Ù. MFC Ŭ·¡½º ¶óÀ̺귯¸®¿¡¼ ÁÖ ¹öÀü °³Á¤ ¶óÀ̺귯¸® À̸§ÀÌ º¯°æ µË´Ï´Ù. Áï, MFC30.DLL¿¡´Â MFC Ŭ·¡½º ¶óÀ̺귯¸®ÀÇ ¹öÀü 3.0À» Æ÷ÇÔ ÇÏ´Â Àç¹èÆ÷ °¡´É DLLÀÔ´Ï´Ù. ÀÌ DLLÀÇ ¾÷±×·¹ÀÌµå ¸», °¡»ó MFC 3.1 DLL MFC31 ¶ó´Â °Í ÀÌ´Ù.DLL ´ë½Å. ´Ù½Ã ¸»ÇÏÁö¸¸, MFC DLLÀÇ »ç¿ëÀÚ Á¤ÀÇ ¹öÀüÀ» »ý»ê ÇÏ´Â MFC ¼Ò½º Äڵ带 ¼öÁ¤ ÇÏ´Â °æ¿ì »ç¿ë ÇϽʽÿÀ ´Ù¸¥ À̸§ (¹× ¼±È£ Çϳª "MFC" ¾øÀÌ) À̸§¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)