TN064: ¾ÆÆÄÆ® ¸ðµ¨ ActiveX ÄÁÆ®·Ñ¿¡¼­ ½º·¹µù

ÀÌ ±â¼ú ³ëÆ®¿¡¼­´Â ¾ÆÆÄÆ® ¸ðµ¨ ½º·¹µù 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)

Index