ÀÌ ±â¼ú ³ëÆ®¿¡¼´Â ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù ActiveX ÄÁÆ®·Ñ¿¡¼ »ç¿ë ÇÏ´Â ¹æ¹ý¿¡ ¼³¸í ÇÕ´Ï´Ù. ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù¸¸ Áö¿ø ÇÏ´ÂÁö Visual c + + ¹öÀü 4.2 À̻󿡼´Â note¡£
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù ¹«¾ùÀԴϱî?
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µå ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥ ³»¿¡¼ ActiveX ÄÁÆ®·Ñ°ú °°Àº Æ÷ÇÔ µÈ °³Ã¼¸¦ Áö ¿øÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¿©·¯ ½º·¹µå¸¦ °¡Áú ¼ö ÀÖÁö¸¸ ÇϳªÀÇ "¾ÆÆÄÆ®," ´Ü ÇϳªÀÇ ½º·¹µå¿¡¼ ½ÇÇà ÇÏ´Â Æ÷ÇÔµÈ µÈ °³Ã¼ÀÇ °¢ ÀνºÅϽº¿¡ ÇÒ´ç µË´Ï´Ù. ´Ù¸¥ ¸»·Î Çϸé, ÄÁÆ®·ÑÀÇ ÀνºÅϽº·Î ¸ðµç È£ÃâÀÌ µ¿ÀÏÇÑ ½º·¹µå¿¡¼ ÀϾ °ÍÀÔ´Ï´Ù.
±×·¯³ª ÄÁÆ®·ÑÀÇ µ¿ÀÏÇÑ Á¾·ùÀÇ ´Ù¸¥ ÀνºÅϽº°¡ ´Ù¸¥ ¾ÆÆÄÆ®¿¡ ÇÒ´ç µÉ ¼ö ÀÖ½À´Ï´Ù. µû¶ó¼, ÄÁÆ®·ÑÀÇ ¿©·¯ ÀνºÅϽº°¡ °øÅë (¿¹¸¦ µé¾î, Á¤Àû ¶Ç´Â ±Û·Î¹ú µ¥ÀÌÅÍ)ÀÇ µ¥ÀÌÅ͸¦ °øÀ¯ ÇÏ´Â °æ¿ì ´ÙÀ½ÀÌ °øÀ¯ µ¥ÀÌÅÍ¿¡ ¾×¼¼½ºÇÒ ÇÊ¿ä°¡ ÀÖÀ» °Í ÀÌ´Ù °°Àº Áß¿ä ¼½¼Ç µ¿±âÈ °³Ã¼¿¡ ÀÇÇØ º¸È£¡£
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù¿¡ ÀÚ¼¼ÇÑ ³»¿ëÀº ÂüÁ¶ ÇϽñ⠹ٶø´Ï´Ù ÇÁ·Î¼¼½º¿Í ½º·¹µå OLE ÇÁ·Î±×·¡¸Ó¿ë ÂüÁ¶¡£
¿Ö Áö¿ø ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù?
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù Áö ¿øÇÏ´Â ÄÁÆ®·ÑÀ» ¶ÇÇÑ ¾ÆÆÄÆ® ¸ðµ¨À» Áö ¿øÇÏ´Â ´ÙÁß ½º·¹µå ÄÁÅ×ÀÌ³Ê ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µùÀ» »ç¿ë ÇÏÁö ¾Ê´Â °æ¿ì ÄÁÅ×ÀÌ³Ê ÄÁÆ®·ÑÀÌ »ç¿ë µÉ ¼ö ÀÖ´Â ÀáÀçÀûÀÎ ÁýÇÕ Á¦ÇÑ¡£
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù »ç¿ë ÇÏ´Â °ÍÀº ½±°Ô ´ëºÎºÐÀÇ ÄÁÆ®·Ñ, ƯÈ÷ ¸¸¾à ±×µéÀÌ °ÅÀÇ ¾ø°Å³ª ÀüÇô ¾ø´Â °øÀ¯ µ¥ÀÌÅÍ¡£
°øÀ¯ µ¥ÀÌÅÍ º¸È£
ÄÁÆ®·Ñ¿¡ °øÀ¯ µ¥ÀÌÅ͸¦ »ç¿ë ÇÏ´Â °æ¿ì Á¤Àû ¸â¹ö º¯¼ö¸¦ °°Àº ¾×¼¼½º¸¦ µ¥ÀÌÅÍ µÑ ÀÌ»óÀÇ ½º·¹µå°¡ µ¿½Ã¿¡ µ¥ÀÌÅ͸¦ ¼öÁ¤ ÇÏÁö ¸øÇÏ°Ô ÇÏ·Á¸é Áß¿ä ¼½¼ÇÀ¸·Î º¸È£ µÇ¾î¾ß ÇÑ´Ù. ÀÌ ¸ñÀû¿¡ ´ë ÇÑ Áß¿ä ¼½¼ÇÀ» ¼³Á¤ ÇÏ·Á¸é ÄÁÆ®·ÑÀÇ Å¬·¡½º¿¡¼ CCriticalSection Ŭ·¡½ºÀÇ Á¤Àû ¸â¹ö º¯¼ö¸¦ ¼±¾ð ÇÕ´Ï´Ù. ÀÌ Áß¿ä ¼½¼Ç °³Ã¼ÀÇ Lock ¹× Unlock ¸â¹ö ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© ¾îµð¿¡ °øÀ¯ µ¥ÀÌÅ͸¦ ¾×¼¼½º ÇÏ´Â Äڵ塣
°í·Á, ¿¹¸¦ µé¾î, ¸ðµç ÀνºÅϽº¿¡¼ °øÀ¯ µÇ´Â ¹®ÀÚ¿À» À¯Áö ÇØ¾ß ÇÏ´Â ÄÁÆ®·Ñ Ŭ·¡½º. ÀÌ ¹®ÀÚ¿ Á¤Àû ¸â¹ö º¯¼ö¿¡¼ À¯Áö °ü¸® ÇÏ °í Áß¿ä ¼½¼Ç¿¡ ÀÇÇØ º¸È£ ¼ö ÀÖ½À´Ï´Ù. ÄÁÆ®·ÑÀÇ Å¬·¡½º ¼±¾ð ´ÙÀ½ Æ÷ÇÔ:
cSampleCtrl Ŭ·¡½º: °ø¿ë COleControl
{
nbsp;? ...
?? Á¤Àû CString _strShared;
?? Á¤Àû CCriticalSection _critSect;
}(&N)
Ŭ·¡½º¿¡ ´ë ÇÑ ±¸ÇöÀº ÀÌ·¯ÇÑ º¯¼ö¿¡ ´ë ÇÑ Á¤ÀÇ Æ÷ÇÔÇÒ °Í:
int CString CSampleCtrl::_strShared;
CCriticalSection CSampleCtrl::_critSect
¿¡ ´ë ÇÑ ¾×¼¼½º¸¦ _strShared
Á¤Àû ¸â¹ö´Â Áß¿ä ¼½¼Ç¿¡ ÀÇÇØ º¸È£ ¹ÞÀ» ¼ö:
void CSampleCtrl::SomeMethod()
{
nbsp;? _critSect.Lock();
?? °æ¿ì (_strShared.Empty())
?????? _strShared = "<text>";
?? _critSect.Unlock();
?? ...
}
¾ÆÆÄÆ® ¸ðµ¨ ÀÎ½Ä ÄÁÆ®·Ñ µî·Ï
¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù Áö ¿øÇÏ´Â ÄÁÆ®·Ñ Ŭ·¡½º id¾Æ·¡¿¡ ±×µéÀÇ Å¬·¡½º ID ·¹Áö½ºÆ®¸® Ç׸ñÀÇ °ªÀÌ "¾ÆÆÄÆ®" ¸í¸í µÈ °ª "ThreadingModel"¸¦ Ãß°¡ ÇÏ ¿© ·¹Áö½ºÆ®¸®¿¡¼ÀÌ ±â´ÉÀ» Ç¥½Ã ÇØ¾ß \InprocServer32 Å°. ÀÌ Å°¸¦ ÄÁÆ®·Ñ¿¡ ´ëÇØ ÀÚµ¿À¸·Î µî·Ï µÇµµ·Ï Àü´Þ ÇÕ´Ï´Ù afxRegApartmentThreading
AfxOleRegisterControlClass ¿©¼¸ ¹ø° ¸Å°³ º¯¼ö¿¡¼´Â Ç÷¡±×:
BOOL CSampleCtrl::CSampleCtrlFactory::UpdateRegistry(BOOL bRegister)
{
nbsp;? °æ¿ì (bRegister)
?????? AfxOleRegisterControlClass (¹Ýȯ
?????????? AfxGetInstanceHandle(),
?????????? m_clsid,
?????????? m_lpszProgID,
?????????? IDS_SAMPLE,
?????????? IDB_SAMPLE,
?????????? afxRegApartmentThreading,
?????????? _dwSampleOleMisc,
?????????? _tlid,
?????????? _wVerMajor,
?????????? _wVerMinor);
?? ´Ù¸¥
?????? AfxOleUnregisterClass (m_clsid, m_lpszProgID); ¹Ýȯ
}(&N)
ÄÁÆ®·Ñ ÇÁ·ÎÁ§Æ®´Â Visual c + + ¹öÀü 4.1 ÀÌ»óÀ» Controlwizard¿¡ ÀÇÇØ »ý¼º µÈ,ÀÌ Ç÷¡±× Äڵ忡 ÀÌ¹Ì ÀÖÀ» °ÍÀÔ´Ï´Ù. º¯È°¡ ÇÊ¿äÇÑ ½º·¹µù ¸ðµ¨À» µî·Ï Çϴ¡£
ÇÁ·ÎÁ§Æ®¿¡ ControlwizardÀÇ ÀÌÀü ¹öÀü¿¡¼ »ý¼º µÈ ±âÁ¸ Äڵ忡 ¿©¼¸ ¹ø° ¸Å°³ º¯¼ö·Î ºÎ¿ï °ªÀ» ÇؾßÇÑ´Ù. ±âÁ¸ ¸Å°³ º¯¼ö°¡ TRUE ÀÎ °æ¿ì¿¡ ±×°ÍÀ» º¯°æ afxRegInsertable | afxRegApartmentThreading
. ±âÁ¸ ¸Å°³ º¯¼ö°¡ FALSE ÀÎ °æ¿ì¿¡ ±×°ÍÀ» º¯°æÇÕ´Ï´Ù afxRegApartmentThreading
¡£
ÄÁÆ®·ÑÀÌ ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù¿¡ ´ë ÇÑ ±ÔÄ¢À» µû¸£Áö ¾Ê´Â °æ¿ì Àü´Þ ÇÏÁö ÇØ¾ß ÇÕ´Ï´Ù afxRegApartmentThreading
ÀÌ ¸Å°³ º¯¼ö¿¡¼¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)