±â¼ú ÀÚ·á: 600771 - ¸¶Áö¸· °ËÅä: 2004³â 3¿ù 19ÀÏ ±Ý¿äÀÏ - ¼öÁ¤: 2.0

MFC DLLÀÇ resource ã´Â ¼ø¼­

ÀÌ ¹®¼­´Â ÀÌÀü¿¡ ´ÙÀ½ ID·Î ÃâÆÇµÇ¾úÀ½: KR600771
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

¿ä¾à

MFC extension DLL¿¡¼­ resource¸¦ °¡Á®¿À±â À§ÇØ CString::LoadString ȤÀº CBitmap::LoadBitmap¸¦ »ç¿ëÇÒ ¶§, EXE file°ú DLL fileÀÇ Áߺ¹µÈ ID°¡ ÀÖ´Â °æ¿ì¿¡´Â EXE fileÀÇ resource¸¦ °¡Á®¿À°Ô µÈ´Ù. À̰ÍÀº MFC¿¡¼­ resource¸¦ ã´Â ¼ø¼­°¡ Extension DLL ÀÎ °æ¿ì EXE fileÀÇ resource¸¦ °¡Àå ¸ÕÀú »ìÆì º¸°í ¿©±â¿¡¼­ ¹ß°ßÀÌ ¾ÈµÈ °æ¿ì¿¡ Extension DLL resouce¸¦ ±×¸®°í ¸¶Áö¸· À¸·Î MFC DLL resource¸¦ ã°ÔµÇ±â ¶§¹®ÀÌ´Ù.

±×·¯³ª MFC Regular DLLÀÎ °æ¿ì¿¡´Â DLL ÀÇ ÇÔ¼ö°¡ resource¸¦ loadÇÒ ¶§ DLLÀÇ resource¸¸À» »ìÆìº¸±â ¶§¹®¿¡ ÀÌ·¯ÇÑ ¹®Á¦°¡ ¾ø´Ù.

Ãß°¡ Á¤º¸

MFC Extension DLL¿¡¼­ ¿Ã¹Ù¸¥ ÀÚ½ÅÀÇ resource¸¦ °¡Á®¿À±â À§Çؼ­´Â AfxSetResourceHandle()¸¦ ÀÌ¿ëÇÏ¿© DLLÀÇ instance¸¦ applicationÀÇ default resource À§Ä¡·Î Àá½Ã settingÇØ ÁÖ¾î¾ß ÇÑ´Ù.

¿¹¸¦ µé¸é ´ÙÀ½°ú °°ÀÌ codingÇÒ¼ö ÀÖ´Ù.
HINSTANCE hInstResourceClient = AfxGetResourceHandle();
AfxSetResourceHandle(g_hInstance);	// uses DLL's instance handle
                        		// set in DllMain
CString strRes;
strRes.LoadString(IDS_MYSTRING);
AfxSetResoourceHandle(hInstResourceClient);
À§ÀÇ code¿¡¼­ g_hInstance´Â DllMain¿¡¼­ grobal º¯¼ö¿¡ ¹Ì¸® ÀúÀåÇÏ¿© »ç¿ëÇÒ¼ö ÀÖÀ¸¸ç, Extension DLL¸¦ AppWizard¸¦ ÀÌ¿ëÇØ ¸¸µé¾ú´Ù¸é wizard°¡ ¸¸µé¾î ³õÀº AFX_EXTENSION_MODULE type º¯¼öÀÇ hResource °ªÀ» ÀÌ¿ëÇØµµ ÁÁ´Ù. ±×·¯³ª AfxGetInstanceHandleÀº ÀÌ¿ëÇÒ¼ö ¾ø´Ù. Extenstion DLL¿¡¼­ ÀÌ ÇÔ¼ö´Â DLLÀÇ instance°¡ ¾Æ´Ñ EXE ÀÇ instance¸¦ returnÇϱ⠶§¹®ÀÌ´Ù.

Âü°í·Î Regular DLL¿¡¼­ EXE ÀÇ resource¸¦ °¡Á®¿À±â À§Çؼ­´Â À§ÀÇ code¿Í ´Â ¿ªÀ¸·Î EXE fileÀÇ resource instance °ªÀ» °¡Áö°í default resource À§Ä¡¸¦ ´Ù½Ã settingÇØÁÖ¾î¾ß ÇÑ´Ù.

¿¹¸¦ µé¾î ´ÙÀ½°ú °°ÀÌ codingÇÒ¼ö ÀÖ´Ù.
HINSTANCE hInstResourceDll = AfxGetResourceHandle();
HINSTANCE hInstResourceClient = (HINSTANCE) ::GetModuleHandle(NULL);
	// use EXE's instance handle
AfxSetResourceHandle(hInstResourceClient);

CString strRes;
strRes.LoadString(IDS_MYSTRING);
AfxSetResoourceHandle(hInstResourceDll);
À§ÀÇ code¿¡¼­ GetModuleHandle ´ë½Å AfxGetInstanceHandle¸¦ »ç¿ëÇØ¼­´Â ¾ÈµÈ´Ù. Regular DLL¿¡¼­ AfxGetInstanceHandle ÇÔ¼ö´Â DLL ÀÇ instance¸¦ returnÇϱ⠶§¹®ÀÌ´Ù.

[ÁÖÀÇ] AfxGetInstanceHandle ÇÔ¼ö´Â Extension DLL°ú Regular DLL¿¡¼­ ¼­·Î Á¤¹Ý´ëÀÇ instance¸¦ returnÇÑ´Ù.

ÂüÁ¶

  • 'Inside Visual C++' David J. Kruglinski Àú
  • Visual C++ documentations
  • 150121? (http://support.microsoft.com/kb/150121/EN-US/ ) PRB: MFC Loads Wrong Resource in Extension DLL

º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 4.1 Subscription
Ű¿öµå:?
KB600771
Retired KB Article´õ ÀÌ»ó Áö¿øµÇÁö ¾Ê´Â Á¦Ç°ÀÇ KB ³»¿ë¿¡ ´ëÇÑ °íÁö »çÇ×
ÀÌ ¹®¼­¿¡¼­´Â Microsoft¿¡¼­ ´õ ÀÌ»ó Áö¿øÇÏÁö ¾Ê´Â Á¦Ç°¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. µû¶ó¼­ ÀÌ ¹®¼­´Â "ÀÖ´Â ±×´ë·Î" Á¦°øµÇ¸ç ¾÷µ¥ÀÌÆ®µÇÁö ¾Ê½À´Ï´Ù.