´ëü °¡´ÉÇÑ ¸Å°³ º¯¼ö ·±Å¸ÀÓ µ¥ÀÌÅ͸¦ ÁöÁ¤ ÇÏ´Â µî·Ï Ŭ¶óÀ̾ðÆ®¸¦ Çã¿ë ÇÕ´Ï´Ù. ÀÌ À§ÇØ µî·Ï ´ëü Áöµµ¿¡ ¿¬°ü µÈ ½ºÅ©¸³Æ®¿¡¼ ´ëü °¡´ÉÇÑ ¸Å°³ º¯¼ö °ª ÀÔ·ÂÀ» À¯Áö ÇÕ´Ï´Ù. µî·Ï ½ÇÇà ½Ã ÀÌ·¯ÇÑ Ç׸ñÀ» ¸¸µì´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼´Â ÀÌ·¯ÇÑ ´Ü°è¡£
ATL °³Ã¼ ¸¶¹ý»ç¸¦ »ç¿ë ÇÏ´Â ½ºÅ©¸³Æ®¸¦ ÀÚµ¿À¸·Î »ý¼º %MODULE%
. ATL ¼¹ö DLL ¶Ç´Â EXEÀÇ ½ÇÁ¦ À§Ä¡¿¡ ´ë ÇÑÀÌ ´ëü °¡´É ¸Å°³ º¯¼ö »ç¿ë¡£
¿Ü¿¡ Ãß°¡ %MODULE%
½ºÅ©¸³Æ®¸¦ ATL °³Ã¼ ¸¶¹ý»ç ¶ÇÇÑ ´ÙÀ½ ÁÙÀ» Ãß°¡ °³Ã¼ÀÇ Å¬·¡½º ¼±¾ð:
DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMAPP)
ÀÌ ¸ÅÅ©·Î È®Àå:
Á¤Àû HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
nbsp; _Module.UpdateRegistryFromResource (IDR_MYCOMAPP, bRegister); ¹Ýȯ
}(&N)
¿©±â¼ _Module
´Â ±Û·Î¹ú CComModule´Â ´ÙÀ½ ¸Þ¼µå ¹× # define ¹®À» ÂüÁ¶:
UpdateRegistryFromResource (UINT nResID, BOOL bRegister
nbsp;???? ±¸Á¶Ã¼ _ATL_REGMAP_ENTRY * pMapEntries = NULL);
# define UpdateRegistryFromResource UpdateRegistryFromResource(&N)
ÀÌ ¸Þ¼µå¸¦ È£Ãâ AtlModuleUpdateRegistryFromResource
, ´ÙÀ½ Äڵ带 Æ÷ÇÔ ÇÏ´Â:
ATLAPI AtlModuleUpdateRegistryFromResource(_ATL_MODULE*pM, nbsp;??????? LPCOLESTR lpszRes, BOOL bRegister ±¸Á¶Ã¼ _ATL_REGMAP_ENTRY * pMapEntries IRegistrar * pReg)
{
? USES_CONVERSION;
? ...
? CComPtr <IRegistrar> p;
? ...
TCHAR szModule [_MAX_PATH];
? GetModuleFileName (¿ÀÈÄ-> m_hInst, szModule, ¿ì¸® ¸ðµÎÀÇ _MAX_PATH);
? p-> AddReplacement(OLESTR("Module"), T2OLE(szModule));
...
}
¸Þ¸ðnbsp;??Atl\include\atlimpl.cpp¿¡¼ÀÌ Äڵ带 ãÀ» ¼ö ÀÖ½À´Ï´Ù(&N).
CoCreateInstance ȹµæ Æ÷ÀÎÅÍ p
, ·¹Áö½ºÆ®¶ó¸¦ °¡¸®Å°´Â. AddReplacement ¹®ÀÚ¿À» Æ÷ÇÔ ÇÏ´Â LPCOLESTR ¸¦ ¼ö½Å ÇÏ´Â ±×·± ´ÙÀ½, " Module
", »Ó¸¸ ¾Æ´Ï¶ó Win32 API ÇÔ¼ö¿¡¼ Àμö ¹®ÀÚ¿À» Æ÷ÇÔ ÇÏ´Â LPCOLESTR GetModuleFileName. ´ëü ¸Ê Ç׸ñÀ» Ãß°¡ ÇÏ´ÂÀÌ ÄÚµå´Â Module
GetModuleFileName°á°ú¿Í °ü·Ã µÈ °ªÀÌ ÀÖ´Â º¯¼öÀÔ´Ï´Ù. Áö±Ý, Àü󸮱⠺¸°í ÇÕ´Ï´Ù %MODULE%
½ºÅ©¸³Æ®¿¡¼ ±×°Í GetModuleFileName ÀÇ °ªÀ¸·Î ´ëü µË´Ï´Ù¡£
Àü󸮱âÀÇ ¶Ç ´Ù¸¥ ¿ëµµ ·±Å¸ÀÓ µ¥ÀÌÅÍ¿Í ½ºÅ©¸³Æ® µ¥ÀÌÅ͸¦ ¿¬°á ÇÏ´Â °Í. ¿¹¸¦ µé¾î ¿ì¸®°¡ ÇÊ¿ä·Î ¹®ÀÚ¿ ¸ðµâ Àüü °æ·Î Æ÷ÇÔ ÇÏ´Â Ç׸ñ " , 1
"¸¦ ³¡¿¡ Ãß°¡ ÇÕ´Ï´Ù. ¸ÕÀú, ´ÙÀ½°ú °°Àº È®ÀåÀ» Á¤ÀÇ:
'MyGoofyKey' = '% ¸ðµâ %1' s
±×·± ´ÙÀ½ ¸Þ¼µå¸¦ ó¸® ÇÏ´Â ½ºÅ©¸³Æ® Áß Çϳª¸¦ È£Ãâ Çϱâ Àü¿¡ Áöµµ¸¦ ±³Ã¼ Ãß°¡:
TCHAR szModule [_MAX_PATH]
GetModuleFileName (¿ÀÈÄ gt; m_hInst, szModule, ¿ì¸® ¸ðµÎÀÇ _MAX_PATH);
p-> AddReplacement(OLESTR("Module"), T2OLE(szModule))
½ºÅ©¸³Æ®ÀÇ ±¸¹® ºÐ¼®À» ÇÏ´Â µ¿¾È µî·Ï È®Àå '%MODULE%, 1'
¿¡c:\mycode\mydll.dll, 1
¡£
¸Þ¸ðnbsp;??µî·ÏÀÚ ½ºÅ©¸³Æ®¿¡¼ 4 K ÃÖ´ë ÅäÅ« Å©±âÀÔ´Ï´Ù. (ÅäÅ« ±¸¹®¿¡¼ ÀνÄÇÒ ¼ö ÀÖ´Â ¿ä¼ÒÀÔ´Ï´Ù.) ÀÌ »ý¼º µÇ°Å³ª Àü󸮱⿡ ÀÇÇØ È®Àå µÈ ÅäÅ«À» Æ÷ÇÔ(&N)¡£
¸Þ¸ðnbsp;??·±Å¸ÀÓ ½Ã ´ëü °ªÀ¸·Î ´ëü, DECLARE_REGISTRY_RESOURCE ¶Ç´Â DECLARE_REGISTRY_RESOURCEID ¸ÅÅ©·Î È£ÃâÀ» Á¦°Å ÇÕ´Ï´Ù. ´ë½Å, È£Ãâ ÇÏ´Â CComModule::UpdateRegistryFromResource, ÀÚ½ÅÀÇ UpdateRegistry ¸â¹ö ÇÔ¼ö·Î ±³Ã¼ ÇÏ °í _ATL_REGMAP_ENTRY ±¸Á¶Ã¼ÀÇ ¹è¿À» Àü´Þ ÇÕ´Ï´Ù. _ATL_REGMAP_ENTRY ÀÇ ¹è¿À» {NULL,NULL}·Î ¼³Á¤ µÈ Àû¾îµµ ÇϳªÀÇ Ç׸ñÀÌ ÀÖ¾î¾ß ÇÕ´Ï´Ù. ±×¸®°íÀÌ Ç׸ñ Ç×»ó ¸¶Áö¸· Ç׸ñ À̾î¾ß ÇÕ´Ï´Ù. UpdateRegistryFromResrouce °¡ È£Ãâ µÉ ¶§ ¾×¼¼½º À§¹Ý ¿À·ù°¡ »ý¼º µÉ ±×·¸Áö ¾ÊÀ¸¸é(&N)¡£