¸ð¸£¸é °í»ýÇÏ´Â VC++ ÆÁ
½º·¹µå¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ µð¹ö±×½Ã OS°¡ ¸ØÃß´Â Çö»ó
XP¿¡¼ ½º·¹µå¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À» µð¹ö±ëÇÏ´Ù º¸¸é ÀÚÁÖ OS°¡ ¸ØÃç¹ö·Á¼
¸®ºÎÆÃ±îÁö ÇØ¾ß µÇ´Â »óȲÀÌ ÀÚÁÖ ¹ß»ýÇÕ´Ï´Ù. ÀÌ ¶§¹®¿¡ 98À̳ª 2000 ¿¡¼ µð¹ö±ëÀ»
Çϱ⵵ Çߴµ¥ VC++ 6.0°ú XP°¡ Ãæµ¹ÇÏ´Â °ÍÀ¸·Îµµ ÀǽÉÀ» Çß¾úÁö¸¸ VC++2005 ¿¡¼µµ
µ¿ÀÏÇÑ ¹®Á¦°¡ »ý±ä´Ù°í ÇÕ´Ï´Ù.
±×·¡¼ °Ë»öÀ» ÇØº¸´Ï ¿øÀÎÀº IME ÂÊ ¹ö±×¶ó°í ÇÕ´Ï´Ù. ÇØ°á¹æ¹ýÀº Á¦¾îÆÇ
--> ±¹°¡ ¹× ¾ð¾î ¿É¼Ç --> ¾ð¾î ÅÇ --> ÀÚ¼¼È÷...
--> °í±Þ --> °í±Þ ÅØ½ºÆ® ¼ºñ½º »ç¿ë ¾È ÇÔ À» üũÇÏ°í ¸®ºÎÆÃÀ»
ÇÕ´Ï´Ù.
VC++ÀÇ ¸Þ¸ð¸® ´©¼ö (Memory Leak) ŽÁö ±â´É »ç¿ëÇϱâ
º¸Åë µð¹ö±ëÀ» ÇÏ´Ùº¸¸é ¸Þ¸ð¸® ¸¯ÀÌ ¹ß»ýÇß´Ù´Â ¸Þ½ÃÁö°¡ Ãâ·ÂµÇÁö¸¸ ¾îµð¿¡¼
Çö»óÀÌ ¹ß»ýÇß´ÂÁö´Â Ç¥½ÃÇØ ÁÖÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ À¯Æ¿¸®Æ¼¸¦ »ç¿ëÇØ º¸±âµµ ÇßÁö¸¸
°¡²û ÇÁ·Î±×·¥¿¡ Ãæµ¹ÀÌ »ý°Ü µð¹ö±ëÀ» ÇÒ ¼ö ¾ø¾ú½À´Ï´Ù.
ÀÌ·± °æ¿ì¿¡ VC++¿¡ ³»ÀåµÈ ¸Þ¸ð¸® ´©¼ö ŽÁö ±â´ÉÀ» »ç¿ëÇØ¼ Çö»óÀÌ ¹ß»ýµÈ
¼Ò½º ÆÄÀÏÀÇ À§Ä¡¸¦ Ç¥½ÃÇϵµ·Ï ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ø¸®´Â new ³ª malloc µîÀÇ ÇÔ¼ö¸¦
»õ·Î Á¤ÀÇÇØ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¶§ ¼Ò½º ÆÄÀÏÀÇ À§Ä¡¸¦ ±â¾ïÇØ µÎ¾ú´Ù°¡ ÇÁ·Î±×·¥ Á¾·á½Ã
ÇØÁ¦µÇÁö ¾ÊÀº ¸Þ¸ð¸®ÀÇ À§Ä¡¸¦ Ç¥½ÃÇϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.
¼Ò½º ÆÄÀϸíÀ» ³ªÅ¸³»´Â ¸¶Å©·Î __FILE__¿Í ¶óÀÎ ¹øÈ£¸¦ ³ªÅ¸³»´Â ¸¶Å©·Î __LINE__ °¡ »ç¿ëµË´Ï´Ù.
(1) MFC¸¦ »ç¿ëÇÏ´Â °æ¿ì
¸ÕÀú stdafx.h ÆÄÀÏ¿¡¼ ´Ù¸¥ include ¹® º¸´Ù Á¦ÀÏ »óÀ§¿¡ ´ÙÀ½ ¼±¾ð¹®À»
Ãß°¡ ÇÕ´Ï´Ù.
#ifdef _DEBUG #define _CRTDBG_MAP_ALLOC // include Microsoft memory leak detection procedures #define
_INC_MALLOC // exclude standard memory alloc procedures #endif
_CRTDBG_MAP_ALLOC Àº crtdbg.h ÆÄÀÏ¿¡¼ new µîÀ» »õ·Î Á¤ÀÇÇϵµ·Ï »ç¿ëµË´Ï´Ù.
±×¸®°í ÇÁ·Î±×·¥ Ãʱ⿡ ¾Æ·¡ ÇÔ¼ö¸¦ Ãß°¡ÇÕ´Ï´Ù.
#ifdef _DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
#endif
stdafx.h ÆÄÀÏÀ» »ç¿ëÇÏÁö ¾Ê´Â ¼Ò½º ÆÄÀÏÀÇ °æ¿ì (Pre compiled header ±â´ÉÀ» »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì)´Â ±âÁ¸ ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö¸¦
»ç¿ëÇÏ°Ô µÇ¹Ç·Î ÀÌ ±â´ÉÀÌ Áö¿øµÇÁö ¾Ê°Ô µË´Ï´Ù.
¸¸ÀÏ stdlib.h ÆÄÀÏ¿¡¼ ÄÄÆÄÀÏ ¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ì´Â ´ÙÀ½À» ½ÃµµÇØ º¾´Ï´Ù.
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC // include Microsoft memory leak detection procedures
#define _INC_MALLOC // exclude standard memory alloc procedures
#endif
(2) MFC¸¦ »ç¿ëÇÏÁö ¾Ê´Â °æ¿ì
crtdbg.h ÆÄÀÏÀÌ ÀÚµ¿À¸·Î Ãß°¡ µÇÁö ¾ÊÀ¸¹Ç·Î ¼Ò½º ÆÄÀÏ¿¡ crtdbg.h ¸¦ Ãß°¡Çؾß
ÇÕ´Ï´Ù.
#ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include [crtdbg.h] <-- ¼öÁ¤ ÇÊ¿ä :-) #endif
¸¶Âù°¡Áö·Î ÇÁ·Î±×·¥ Ãʱ⿡ ¾Æ·¡ ÇÔ¼ö¸¦ Ãß°¡ ÇÕ´Ï´Ù.
#ifdef _DEBUG
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
#endif
(3) ¸µÅ©¿¡·¯°¡ ¹ß»ýÇÏ´Â °æ¿ì
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned
int)" (??2@YAPAXI@Z) already defined in StdAfx.obj
À§¿Í °°Àº ¸µÅ© ¿¡·¯°¡ ¹ß»ýÇÏ°Ô µÇ¸é Àӽà ¹æÆíÀ¸·Î ¾Æ·¡¿Í °°ÀÌ °Á¦·Î ¸µÅ©Çϵµ·Ï ÇÕ´Ï´Ù.
Project Settings --> Link --> Customize --> Force file output Ç׸ñ üũ
ÀÌ´Â Project options¿¡ /FORCE Ç÷¡±×¸¦ Ãß°¡ ÇÏ´Â °Í°ú µ¿ÀÏ ÇÕ´Ï´Ù.
´Ù¸¥ ¸µÅ© ¿¡·¯ÀÇ °æ¿ì´Â ¾Æ·¡ »çÀÌÆ®¸¦ ÂüÁ¶ÇÕ´Ï´Ù.
http://support.microsoft.com/kb/148652
Âü°í: http://www.codeproject.com/KB/cpp/MemLeakDetect.aspx
static ¶óÀ̺귯¸® ÀÛ¼º½Ã ÁÖÀÇ»çÇ×
static ¶óÀ̺귯¸®¸¦ ÀÛ¼ºÇØ application¿¡ ¸µÅ©ÇÏ·Á´Ù º¸¸é LIBCD.lib µîÀÇ ¸µÅ© ¿¡·¯°¡ ¹ß»ýÇÕ´Ï´Ù. À̰ÍÀº static library À§Àúµå¿Í application À§Àúµå°¡ Code Generation ¿É¼ÇÀ» ¼·Î ´Ù¸£°Ô »ý¼ºÇϱ⠶§¹®ÀÔ´Ï´Ù.
ÇØ°á ¹æ¹ýÀº Project Settings --> C/C++ --> Code Generation --> Use run-time library --> Debug Multithreaded XXX ½ÄÀ¸·Î application¿¡ »ç¿ëµÈ ¼Ó¼º°ú ¸ÂÃçÁà¾ß ÇÕ´Ï´Ù.
¸¶Âù°¡Áö·Î ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ ÄÄÆÄÀϽà already defined... LIBC.lib, LIBCMT.lib µîÀÇ ¿¡·¯ ¸Þ½ÃÁö°¡ Ãâ·ÂµÈ´Ù¸é »ç¿ëÁßÀÎ ¶óÀ̺귯¸®ÀÇ ÀϺΰ¡ ÇÁ·Î±×·¥°ú ´Ù¸¥ Run-time library ·Î ÄÄÆÄÀÏ µÈ °ÍÀ̱⠶§¹®¿¡ ÀÌ ¹®Á¦¸¦ ¼öÁ¤ÇØ Áà¾ß ÇÕ´Ï´Ù.
LIBC.lib ´Â single-thread ¿ëÀ̰í LIBCMT.lib ´Â multithread ¿ëÀ̸ç LIBCD.lib ´Â Debug¿ë single-thread ÀÔ´Ï´Ù.
µð¹ö±×½Ã º¯¼ö°ª º¸±â
»ç¿ëÀÚ ÁöÁ¤ ±¸Á¶Ã¼µîÀÇ °ªÀÌ Ç¥½ÃµÇÁö ¾ÊÀ» ¶§³ª Å©±â°¡ ¾ÆÁÖ Å« º¯¼öÀÇ °æ¿ì ¸Þ¸ð¸® ºä¸¦ ¶ç¿ö¼ º¼ ¼öµµ ÀÖÁö¸¸ ºÒÆíÇÏ´Ù. ÀÌ °æ¿ì º¯¼ö,10 (¾ÕÀÇ 10 ¹ÙÀÌÆ®¸¸ Ç¥½Ã) Çü½ÄÀ¸·Î ÀÔ·ÂÇÏ¸é µÈ´Ù. ´Ü, ¹è¿·Î ¼±¾ðÇÑ º¯¼ö´Â µ¿ÀÛÇÏÁö ¾Ê°í Æ÷ÀÎÅÍÀÎ °æ¿ì¸¸ µÈ´Ù.
¿øÇÏ´Â µ¥ÀÌÅÍ ÇüÀ¸·Î º¸°í ½ÍÀº °æ¿ì¿¡´Â (Çüº¯È¯ÀÚ)º¯¼ö Çü½ÄÀ¸·Î ÀÔ·ÂÇÑ´Ù.
ÅØ½ºÆ®¸¦ Ä÷³À¸·Î ¼±ÅÃÇϱâ
- ÅØ½ºÆ®¸¦ ¶óÀÎÀ¸·Î ¼±ÅÃÇÏÁö ¾Ê°í Ä÷³À¸·Î ¼±ÅÃÇÏ·Á¸é ALT + ¸¶¿ì½º µå·¡±×, ¶Ç´Â ALT+SHIFT+¹æÇâ۸¦ »ç¿ëÇÑ´Ù.
ÄÀ» ¸ÂÃç³õÀº °æ¿ì Áß°£¿¡ ºÒÇÊ¿äÇÑ °ÍÀ» »èÁ¦Çϰųª ³¢¿ö ³ÖÀ» °æ¿ì ÀÏÀÏÈ÷ ŸÀÌÇÎÇÏÁö ¾Ê¾Æµµ µÇ¹Ç·Î Æí¸®ÇÏ´Ù.
¹«·á À©µµ¿ì ÄÄÆÄÀÏ·¯ »ç¿ëÇϱâ
- ÄÚµåÇÁ·ÎÁ§Æ®ÀÇ ´ÙÀ½ ±â»ç¸¦ Âü°íÇÏ¿© VC++ 2005 Express ¹öÀüÀ» ¼³Ä¡Çϰí MFC´ë½Å¿¡ WTLÀ» °³¹ß ÇÁ·¹ÀÓ¿öÅ©·Î »ç¿ëÇÑ´Ù.
Using WTL with Visual C++ 2005 Express Edition
http://www.microsoft.com/express/2005/download/default.aspx
- ¹«·á ¸®¼Ò½º ÆíÁý±â·Î´Â ResEdit À» ÃßõÇÑ´Ù.
- VC++ 2005 Express¿¡ ¸®¼Ò½ºÆíÁý±â µî·Ï ¹æ¹ý: RCÆÄÀÏÀ» ¼±ÅÃÇÏ°í ÆË¾÷¸Þ´º¿¡¼ Open With...¸¦ Ŭ¸¯ÇÑ´Ù. [Add...] ¹öưÀ¸·Î ¸®¼Ò½º ÆíÁý ÇÁ·Î±×·¥À» µî·Ï ÈÄ [Set as Default]¸¦ Ŭ¸¯ÇÑ´Ù.
- VC Express ¹öÀü¿¡¼ MFC ÇÁ·Î±×·¥ ÄÄÆÄÀÏÇϱâ
- win32++: °£´ÜÇÑ Win32 ·¡ÆÛ Ŭ·¡½º¸¦ ¿øÇÑ´Ù¸é....
µé¿©¾²±â ÀÚµ¿ Á¤·ÄÇϱâ
- ÀÔ¼öÇÑ ¼Ò½º°¡ µé¿©¾²±â°¡ Á¦´ë·Î ¾ÈµÅ ÀÖ¾î¼ ÀÐ±â ºÒÆíÇÑ °æ¿ì ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ÀÚµ¿Á¤·Ä ÇÒ ¼ö ÀÖ´Ù.
¿ì¼± Á¤·ÄÇÒ ºÎºÐÀ» ¼±ÅÃÇϰí SHIFT + TAB ۸¦ ¸î ¹ø ´·¯ ºÒÇÊ¿äÇÑ ºÒÇÊ¿äÇÑ °ø¹é ¹®ÀÚ¸¦ Á¦°ÅÇÑ´Ù.
±×¸®°í ALT+F8 À» ´©¸£¸é ÀÚµ¿À¸·Î µé¿©¾²±â¸¦ ¸ÂÃçÁØ´Ù.
Ãß°¡µÈ Ŭ·¡½º°¡ Ŭ·¡½ºÀ§Àúµå¿¡¼ º¸ÀÌÁö ¾ÊÀ» ¶§
º¸ÅëÀº Ŭ·¡½ºÀ§Àúµå ÆÄÀÏ(.clw)À» »èÁ¦ÇÏ°í °»½ÅÇØ ÁØ´Ù.
ÀÌ·¸°Ô ÇØµµ Ŭ·¡½º°¡ º¸ÀÌÁö ¾ÊÀ¸¸é ´ÙÀ½ ³»¿ëÀÌ ¼Ò½ºÆÄÀÏ¿¡ ÀÖ´ÂÁö È®ÀÎÇÏ°í ¾øÀ¸¸é Ãß°¡ÇØ ÁØ´Ù.
Çì´õ ÆÄÀÏ¿¡´Â ´ÙÀ½ ³»¿ëÀÌ µé¾î ÀÖ¾î¾ß ÇÑ´Ù.
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMyWnd)
//}}AFX_VIRTUAL
// Generated message map functions
protected:
//{{AFX_MSG(CMyWnd)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
±×¸®°í ¼Ò½º ÆÄÀÏ¿¡´Â ´ÙÀ½ ³»¿ëÀÌ ÀÖ¾î¾ß ÇÑ´Ù.
BEGIN_MESSAGE_MAP(CMyWnd, CWnd)
//{{AFX_MSG_MAP(CMyWnd)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
À§ ³»¿ëÀÌ ¾ø´Â °æ¿ì Ŭ·¡½ºÀ§Àúµå¿¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù.
ÆíÁýÇÑ ¸®¼Ò½º°¡ °»½ÅÀÌ ¾ÈµÈ °æ¿ì
¿½ÉÈ÷ ICON ÆÄÀÏÀ» ÆíÁýÇØ¼ ÀúÀåÇߴµ¥ VC6¿¡¼ ¿¾îº¸¸é ¼öÁ¤Çϱâ ÀüÀÇ ³»¿ëÀÌ º¸¿© ´çȲÇÏ´Â °æ¿ì°¡ ÀÖ´Ù.
ÀÌ ¶§´Â *.aps ÆÄÀÏÀ» »èÁ¦ÇØ ÁØ´Ù. ÀÌ ³ðÀÌ ¸®¼Ò½º µ¥ÀÌÅ͸¦ ij½Ã ÇØµÎ´Â ÆÄÀÏ·Î º¸ÀδÙ.
±×·¡¼ ½ÇÁ¦ ¸®¼Ò½º ÆÄÀÏ¿¡¼ Àоî¿ÀÁö ¾Ê°í ij½ÃµÈ µ¥ÀÌÅ͸¦ ÀÐ¾î ¿À¹Ç·Î ÀÌÀü µ¥ÀÌÅͰ¡ º¸ÀÌ´Â °ÍÀÌ´Ù.
¼Ò½º Äڵ带 ¹èÆ÷ÇÏ´Â °æ¿ì¿¡µµ *.aps, *.plg, *.ncb, *.opt ¹× *.obj ÆÄÀÏ µîÀº ºÒÇÊ¿äÇÏ°í ¿ë·®¸¸ ¸¹ÀÌ Â÷Áö ÇϹǷΠ»èÁ¦ÇÏ°í ¹èÆ÷Çϵµ·Ï ÇØ¾ß ÇÑ´Ù.
GetTickCount »ç¿ë½Ã ÁÖÀÇ
°£´ÜÈ÷ ½Ã°£ °£°ÝÀ» ÃøÁ¤Çϱâ À§ÇØ GetTickCount ´Â 32ºñÆ® °ªÀ¸·Î ½Ã½ºÅÛ ½ÃÀÛÈÄ 49.7 ÀÏ ¸¶´Ù ÃʱâÈ µÈ´Ù.
ÇÏÁö¸¸ unsigned long ŸÀÔÀ̶ó¼ overflow °¡ µÇ´õ¶óµµ Å« ¹®Á¦´Â ¾ø´Ù.
DWORD begin, elaps;
begin = GetTickCount();
// °æ°ú ½Ã°£ ¾ò±â
elaps = GetTickCount() - begin;
¿¹¸¦µé¾î 0 - 0xFFFFFFFF ÀÇ °á°ú´Â 1 ÀÌ ³ª¿Â´Ù.
200 - (0xFFFFFFFF - 100) ÀÇ °á°ú´Â 301 ÀÌ ³ª¿Â´Ù.
ÇÏÁö¸¸ ÀûÀº ½Ã°£ÀÇ °æ°ú½Ã°£ ÃøÁ¤¿¡ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç 49.7 ÀÏÀÌ ³Ñ´Â °æ°ú ½Ã°£À» ¾òÀ¸·Á¸é ¿©ÀüÈ÷ ÁÖÀÇÇØ¾ß ÇÑ´Ù.
PostMessage »ç¿ë½Ã ÁÖÀÇ
PostMessage ´Â SendMessage ¿Í ´Þ¸® ÇÁ·Î±×·¥ÀÌ ¸Þ½ÃÁö¸¦ ºó¹øÈ÷ ó¸®Çؼ ¸Þ½ÃÁöÅ¥°¡ full ÀÎ °æ¿ì¿¡´Â 󸮵ÇÁö ¾Ê´Â´Ù. µû¶ó¼ Áß¿äÇÑ Ã³¸®ÀÇ °æ¿ì´Â ¸®ÅϰªÀ» È®ÀÎÇØ¾ß ÇÑ´Ù.
È¸é °»½Å½Ã ±ô¹ÚÀÓ ¾ø¿¡±â
Ŭ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡ ±×·¡ÇÈ ÀÛ¾÷À̳ª ÄÁÆ®·ÑÀ» ¿Ã¸± ¶§ ȸéÀÌ ±ô¹ÚÀÌ´Â ¹®Á¦¸¦ ¾ø¿¡·Á¸é,
(1) Memory DC¸¦ »ç¿ëÇÑ´Ù.
ȸ鿡 Á÷Á¢ ±×¸± °æ¿ì´Â ¹è°æ Ä¥Çϰí À§¿¡ ´Ù¸¥ °ÍÀ» ±×¸®¸é À̰ÍÀÌ ´«¿¡ ¶ç°Ô µÈ´Ù. CreateCompatibleDC¸¦ ÀÌ¿ëÇØ ¸Þ¸ð¸®DC¿¡ ¸ðµÎ ±×·ÁÁØ ´ÙÀ½ BitBlt¸¦ ÀÌ¿ëÇØ ÇѲ¨¹ø¿¡ ȸ鿡 º¹»çÇØ ÁÖ¸é ±ô¹ÚÀÓÀÌ ¾ø¾î Áø´Ù.
(2) OnEraseBkgnd (WM_ERASEBKGND) 󸮸¦ ¸·´Â´Ù.
À©µµ¿ì´Â ±âº»ÀûÀ¸·Î È¸é °»½Å½Ã WM_ERASEBKGND·Î ¸ÕÀú ¹è°æÀ» Áö¿ì°í WM_PAINT·Î ȸéÀ» ±×¸°´Ù. º¸Åë ¹è°æÀ» Èò»öÀ¸·Î ä¿ì±â(Áö¿ì±â) ¶§¹®¿¡ ±ô¹ÚÀÓÀÌ ¹ß»ýÇÑ´Ù. OnEraseBkgnd ¸¦ ¹Ù·Î return TRUE; ·Î ÇÏ¿© 󸮸¦ ¸·À¸¸é ±ô¹ÚÀÓÀÌ ¾ø¾îÁø´Ù.
(3) Parent À©µµ¿ì°¡ ÀÖ´Â °æ¿ì
¸ÞÀÎ ÇÁ·¹ÀÓÀÌ ¾Æ´Ñ ÀÏ¹Ý À©µµ¿ì¸¦ Parent À©µµ¿ì·Î °®°í ÀÖ´Â °æ¿ì Parent À©µµ¿ì¸¦ ¸ÕÀú ±×¸®°í Child À©µµ¿ì¸¦ ±×¸®±â ¶§¹®¿¡ Child À©µµ¿ì¿¡¼ ±ô¹ÚÀÓÀÌ ¹ß»ýÇÑ´Ù. ÀÌ ¶§´Â Parent À©µµ¿ìÀÇ ¼Ó¼º¿¡ WS_CLIPCHILDREN À» Ãß°¡ ÇØÁÖ¸é Parent ¿µ¿ª °»½Å½Ã Child ¿µ¿ªÀº Á¦¿ÜÇϱ⠶§¹®¿¡ ±ô¹ÚÀÓÀÌ ¾ø¾îÁø´Ù.
ModifyStyle(0, WS_CLIPCHILDREN);
2006-04-27 [Á¶È¸: 32767]
|