AUTO
[ID/PWã±â] [ȸ¿ø°¡ÀÔ]
´º½º¿Í Á¤º¸ (276)
ÀÚÀ¯ °Ô½ÃÆÇ (392)
°¡ÀÔ Àλç (1960)
°øÁö»çÇ× (5)
AJAX ÇнÀ (72)
ASP Áú¹® (71)
ASP ÇнÀ (271)
MYSQL ÇнÀ (73)
SQLSERVER ÇнÀ (337)
¿À¶óŬ ÇнÀ (66)
µ¥ÀÌŸº£À̽º ÇнÀ (29)
¾×¼Ç½ºÅ©¸³Æ® ÇнÀ (261)
¾×¼Ç½ºÅ©¸³Æ® Áú¹® (65)
ÆÛ¿Â Ç÷¡½Ã (204)
Ç÷¡½Ã ³×ºñ°ÔÀÌ¼Ç (59)
Ç÷¡½Ã ¼Ò½º (532)
Ç÷¡½Ã ¿¬±¸½Ç (536)
Ç÷¡½Ã Áú¹® (647)
Ç÷¡½Ã °ÔÀÓ (53)
Ç÷¡½Ã ÀÎÆ®·Î (44)
Ç÷¡½Ã ÀÌÆåÆ® (45)
ÀÚÀÛ Ç÷¡½Ã (83)
ű×,HTML Áú¹® (43)
ű×,HTML ÇнÀ (131)
ÀÚ¹Ù,JSP ÇнÀ (161)
ÀÚ¹Ù,JSP Áú¹® (70)
ÀÚ¹Ù½ºÅ©¸³Æ® ÇнÀ (223)
ÀÚ¹Ù½ºÅ©¸³Æ® ¼Ò½º (73)
ÀÚ¹Ù½ºÅ©¸³Æ® Áú¹® (79)
Æ÷Åä¼¥ Áú¹® (108)
Æ÷Åä¼¥ ÇнÀ (369)
Ãßõ À̹ÌÁö (239)
ÀÚÀÛ À̹ÌÁö (81)
ÆÛ¿Â À̹ÌÁö (445)
PHP Áú¹® (62)
PHP ÇÔ¼ö (2658)
PHP ÇнÀ (661)
ÇÁ·Î±×·¡¹Ö ÇнÀ (205)
ÀÎÅͳݼ­¹ö ÇнÀ (346)
ÀÎÅͳݼ­¹ö Áú¹® (22)
³×À̹ö ¼Ó ȨÇǵðÀÚÀδåÄÄ
´ÙÀ½ ¼Ó ȨÇǵðÀÚÀδåÄÄ
±¸±Û ¼Ó ȨÇǵðÀÚÀδåÄÄ
¿¥ÆÄ½º ¼Ó ȨÇǵðÀÚÀδåÄÄ
¾ßÈÄ ¼Ó ȨÇǵðÀÚÀδåÄÄ
³×ÀÌÆ® ¼Ó ȨÇǵðÀÚÀδåÄÄ
½ÎÀÌ¿ùµå ȨÇǵðÀÚÀδåÄÄ
¿¥¿¡½º¿£ ȨÇǵðÀÚÀδåÄÄ
  ȨÇǵðÀÚÀδåÄÄ > ÇÁ·Î±×·¡¹Ö ÇнÀ
   
  COMÀÎÅÍÆäÀ̽º µðÀÚÀÎ °¡À̵å
  ±Û¾´ÀÌ : ¼Õ´Ô     ³¯Â¥ : 05-07-25 10:33     Á¶È¸ : 2446    
   http://cafe.naver.com/q69/7141 (403)

COMÀÎÅÍÆäÀ̽º µðÀÚÀÎ °¡À̵å


ÀÌÀç±Ô (¿µ»êÁ¤º¸Åë½Å)

Microsoft´Â Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÔ°ú ´õºÒ¾î Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ½±°Ô Á¤ÀÇÇÒ ¼ö ÀÖ°Ô ÇØ ÁØ´Ù. Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º´Â Ç¥ÁØ ÀÎÅÍÆäÀ̽º·Î´Â Ç¥ÇöÇÒ ¼ö ¾ø´Â ¼­ºñ½º¸¦ ±¸ÇöÇϱâ À§Çؼ­ »ç¿ëµÈ´Ù.

ÀÎÅÍÆäÀ̽º´Â Àç»ç¿ëµÇ´Â °æ¿ì°¡ ¸¹°í, ¿øÄ¢ÀûÀ¸·Î º¯°æµÇ¾î¼­´Â ¾ÈµÇ±â ¶§¹®¿¡ ÀÎÅÍÆäÀ̽º¸¦ »õ·Î ¸¸µå´Â ÀÏÀº ¸Å¿ì ½ÅÁßÇØ¾ß ÇÑ´Ù. ÀÌ ±Û¿¡¼­´Â Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¶§ °í·ÁÇØ¾ßÇÒ µðÀÚÀÎ ¿ä¼Ò¿¡ ´ëÇØ¼­ »ìÆìº»´Ù.

MSÀÇ ÄÄÆ÷³ÍÆ® ±â¼ú

MicrosoftÀÇ ÄÄÆ÷³ÍÆ® ±â¼úÀº COM / OLE / ActiveX µîÀ¸·Î È¥µ·½º·± ¸íĪÀÌ ºÙ¾î ÀÖ´Ù.

¾ö¹ÐÇÑ Àǹ̿¡¼­ ±¸ºÐÀ» ÇØ º»´Ù¸é, COM(Component Object Model)Àº ÀÎÅÍÆäÀ̽º, COM Ŭ·¡½º, COM°´Ã¼µîÀ» Á¤ÀÇÇÏ´Â ½ºÆå°ú Ç¥ÁØÀûÀÎ ÀÎÅÍÆäÀ̽º, ±×¸®°í ¿î¿µÃ¼Á¦¿¡ Æ÷ÇÔµÈ COM ·±Å¸ÀÓ ¸ðµâÀ» ¸»ÇÑ´Ù.

OLE(Object Linking & Embedding)´Â ÁÖ·Î OLE ¹®¼­ ±Ô¾à, ¿¹¸¦ µé¸é Word¿¡ Excel¹®¼­¸¦ Æ÷ÇÔ½ÃŰ´Â ±â¼ú¿¡ °üÇÑ ÇÁ·ÎÅäÄÝÀÌ´Ù. OLE´Â ÀÌÀü¿¡ DDE±â¹ÝÀ¸·Î ±¸ÇöµÇ¾úÀ¸³ª, ÇöÀç´Â COM±â¹ÝÀ¸·Î ±¸ÇöµÇ¾î ÀÖ´Ù.

ActiveX´Â ÁÖ·Î ÀÎÅͳÝÀ» Ȱ¼ºÈ­(Activation)½ÃŰ´Â ±â¼ú¿¡ °üÇÑ °ÍÀÌ´Ù. ActiveX ÄÁÆ®·Ñ, Active µµÅ¥¸ÕÆ® µîÀÇ ±â¼úÀº ÀÎÅͳÝÀ» º¸´Ù ´õ ¾×ƼºêÇÏ°Ô ¸¸µå´Â ±â¼úµéÀÌ´Ù.

¼­·Î ±¸ºÐµÇ¾î ÀÖ´Â µíÇÑ ¼¼°¡Áö ¿µ¿ªÀº ±â¼úÀûÀ¸·Î´Â ¼­·Î È¥ÇյǾî ÀÖ´Â ÇüÅÂÀÌ´Ù. ¿¹¸¦ µé¾î COM¿¡¼­ µ¥ÀÌŸ´Â IDataObject¶ó´Â ÀÎÅÍÆäÀ̽º·Î Ç¥ÇöµÈ´Ù. ÀÌ IDataObject´Â OLE¿¡¼­µµ ActiveXÄÁÆ®·Ñ¿¡¼­µµ »ç¿ëµÈ´Ù.

IDataObject¿Í °°Àº ÀÎÅÍÆäÀ̽º´Â ±×°ÍÀÌ Àß ¼³°èµÇ¾ú±â ¶§¹®¿¡ ¼­·Î ´Ù¸¥ ¼­ºñ½º¿¡¼­µµ »ç¿ëµÈ´Ù. ÀÌ·± °øÅëºÎºÐÀº ÇÁ·Î±×·¡¸Óµé¿¡°Ô ½±°Ô ´Ù¸¥ ¼­ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ÀÕÁ¡À» °¡Áö°í ÀÖ´Ù.

ÀÌ·¯ÇÑ ÀÌÀ¯·Î ÀÎÅÍÆäÀ̽ºÀÇ µðÀÚÀÎÀº ¸Å¿ì Áß¿äÇÏ´Ù.

ÀÎÅÍÆäÀ̽º¶õ ¹«¾ùÀΰ¡?

ÀÎÅÍÆäÀ̽º´Â ÀǹÌÀûÀ¸·Î º¸¾Æ¼­ ¡°±â´É¡±ÀÇ Ç¥ÇöÀÌ´Ù. ¿¹¸¦ µé¾î IDataObject´Â µ¥ÀÌŸÀÇ Àü¼Û±â´ÉÀ» ÀǹÌÇϰí, IViewObject´Â µ¥ÀÌŸÀÇ Ç¥Çö(rendering)±â´ÉÀ» ÀǹÌÇÑ´Ù. ÀÌ µÎ ÀÎÅÍÆäÀ̽º¸¦ ¸ðµÎ ±¸ÇöÇÑ COM°´Ã¼´Â µ¥ÀÌŸ Àü¼Û°ú Ç¥Çö±â´ÉÀ» °¡Áö°í ÀÖ´Â °´Ã¼°¡ µÈ´Ù.

ÀÎÅÍÆäÀ̽º´Â ¡°Ç¥¸é¡±À̶ó´Â ¶æÀÌ´Ù. COMŬ·¡½º°¡ ½ÇÁ¦·Î ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏÁö¸¸ Ŭ¶óÀÌ¾ðÆ®´Â COMŬ·¡½ºÀÇ ¹ÛÀ» ½Î°í ÀÖ´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼­ COM°´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

<±×¸² 1> COM Ŭ·¡½º¿Í Ŭ¶óÀ̾ðÆ®

ÀÎÅÍÆäÀ̽ºÀÇ ½Çü´Â ±Ô¾à(contract) ¸¦ Á¤ÀÇÇÏ´Â ¿¬°üµÈ ÇÔ¼öµéÀÇ ÁýÇÕÀÌ´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ÇÔ¼öµéÀº ÀǹÌÀû(semantic)À¸·Î¸¸ Á¤ÀǵȴÙ. ¿¹¸¦ µé¾î IDataObjectÀÇ GetDataÇÔ¼ö´Â ÀÎÀÚ·Î ÁÖ¾îÁø FORMATETC Çü½ÄÀÇ µ¥ÀÌŸ¸¦ STGMEDIUM¿¡ ´ã¾Æ¼­ °¡Á®¿Â´Ù´Â Àǹ̸¸ Á¤ÀÇÇÑ´Ù.

ÀÎÅÍÆäÀ̽º´Â IID(Interface ID)¶ó´Â GUID(Globally Unique Identifier)·Î ±¸º°µÈ´Ù. IDataObject¿Í °°Àº À̸§Àº ´ÜÁö ÆíÀÇ»ó ºÙÀÌ´Â À̸§ÀÏ »ÓÀ̰í, ³»ºÎÀûÀÎ ¸ÞÄ«´ÏÁò¿¡¼­´Â IID°¡ »ç¿ëµÈ´Ù. ¿¹¸¦ µé¾î QueryInterface¿¡¼­ °´Ã¼ÀÇ Æ¯Á¤ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ¿ä±¸ÇÒ ¶§ IID°¡ ÀÎÀÚ·Î µé¾î°£´Ù.

¸ðµç ÀÎÅÍÆäÀ̽º´Â IUnknownÀ» °è½ÂÇÑ´Ù. IUnknownÀº °´Ã¼°¡ ƯÁ¤ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇß´ÂÁö ¾Ë¾Æ³»´Â QueryInterfaceÇÔ¼ö¿Í °´Ã¼ÀÇ »ýÁ¸À» ½º½º·Î °áÁ¤ÇÏ´Â AddRef¿Í Release¶ó´Â ÇÔ¼ö¸¦ °¡Áö°í ÀÖ´Ù. QueryInterface¸¦ ÅëÇØ °´Ã¼°¡ ±¸ÇöÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¾Ë¾Æ³»´Â °ÍÀ» ÀÎÅÍÆäÀ̽º Çù»ó(interface negotiation)À̶ó°í ÇÑ´Ù.

¼­ºñ½º - ÀÎÅÍÆäÀ̽ºÀÇ ÁýÇÕ

COMÀº ¿©·¯°¡Áö ¼­ºñ½ºµéÀ» Á¦°øÇÑ´Ù. µ¥ÀÌŸ Àü¼Û ¼­ºñ½º, OLE¹®¼­ ¼­ºñ½º, ActiveX ÄÁÆ®·Ñ ¼­ºñ½º µîÀÌ ±×°ÍµéÀÌ´Ù. ±×·±µ¥ ÀÌ ¼­ºñ½ºµéÀº ¼­ºñ½º¿¡ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽ºÀÇ ÁýÇÕ°ú ±×°ÍÀ» ±¸ÇöÇÑ Ç¥ÁØ COM°´Ã¼, ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ Åë½Å±Ô¾àµé·Î ÀÌ·ç¾îÁø´Ù.

¿¹¸¦ µé¾î ActiveXÄÁÆ®·ÑÀº IDispatch, IViewObjectEx, IPropertyPage µî°ú °°Àº ÀÎÅÍÆäÀ̽ºµé°ú IOleControl°ú IOleControlSite ÀÎÅÍÆäÀ̽º°£ÀÇ Åë½Å±Ô¾àµîÀ» Á¤ÀÇÇϰí ÀÖ´Â ¼­ºñ½ºÀÌ´Ù.

COM Ŭ·¡½º / COM °´Ã¼ / COM ÄÄÆ÷³ÍÆ®

COMŬ·¡½º´Â Çϳª ÀÌ»óÀÇ ÀÎÅÍÆäÀ̽º°¡ ±¸ÇöµÈ ½ÇüÀÌ´Ù. COMŬ·¡½º´Â ÀÏÁ¾ÀÇ ºØ¾î»§±â°è¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ºØ¾î»§ ±â°è·Î Âï¾î³½ °Í(ÀνºÅϽº)ÀÌ ¹Ù·Î COM°´Ã¼À̸ç, ÀÌ COM°´Ã¼°¡ ½ÇÁ¦·Î Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ »ç¿ëµÈ´Ù.

COMŬ·¡½º´Â Ŭ·¡½º ÆÑÅ丮(class factory)¿¡ ÀÇÇØ¼­ ÀνºÅϽº¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. C++·Î Ä¡¸é new¿¬»êÀÚ¿¡ ÇØ´çÇϴ Ŭ·¡½º ÆÑÅ丮´Â COMÀÌ ´Ù¾çÇÑ È¯°æ¿¡ Àû¿ëµÇ´õ¶óµµ µ¿ÀÏÇÑ °´Ã¼ »ý¼º ¸ÞÄ«´ÏÁòÀ» ±¸ÇöÇϱâ À§Çؼ­ ¸¸µé¾î Áø °ÍÀÌ´Ù.

COM ÄÄÆ÷³ÍÆ®´Â ¼­ºñ½º¸¦ ÇÏ´Â COM°´Ã¼¿Í, COM°´Ã¼¸¦ »ý¼ºÇϴ Ŭ·¡½º ÆÑÅ丮, Àڱ⠵î·Ï ÄÚµåµîÀ» Æ÷ÇÔÇÏ´Â ÆÐŰÁöÀÌ´Ù. COM°´Ã¼´Â ÀÌ ¿ÏÀüÇÑ ÆÐŰÁöÀÇ ÇüÅ·Π¹èÆ÷µÇ¾î¾ß ÇÑ´Ù.

COMŬ·¡½º´Â CLSID¿¡ ÀÇÇØ¼­ ±¸ºÐµÈ´Ù. CLSID´Â ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ COMŬ·¡½º¸¦ À¯ÀÏÇÏ°Ô ±¸ºÐÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ±×·¯³ª CLSID´Â GUIDÀ̱⠶§¹®¿¡ ÇÁ·Î±×·¥¿¡¼­ ´Ù·ç±â Èûµé´Ù.

À̸¦ À§Çؼ­ Àΰ£ÀÌ ÀÐÀ» ¼ö ÀÖ´Â ProgID¶ó´Â °ÍÀ» »ç¿ëÇϱ⵵ ÇÑ´Ù. ¿¹¸¦ µé¾î Á¤º¸½Ã´ë¿¡¼­ ¸¸µç MyControlÀ̶ó´Â ActiveX ÄÁÆ®·ÑÀÇ CLSID´Â ¡°Infoage.MyControl.1¡±°ú °°Àº À̸§À» °¡Áú ¼ö ÀÖ´Ù. ProgID¿Í CLSIDÀÇ ¸ÊÇÎÀº ½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ¾î ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º µðÀÚÀÎÀÇ Á߿伺

ÇÁ·Î±×·¡¹Ö¿¡ ÀÖ¾î µðÀÚÀÎÀÌ Â÷ÁöÇÏ´Â ºñÁßÀº ½Ç·Î Å©´Ù. Á¤È®È÷ ¸»ÇÏÀÚ¸é µðÀÚÀο¡ ÅõÀÚÇÏ´Â ³ë·ÂÀÌ ¸¹À» ¼ö·Ï °á°úÀûÀ¸·Î ÈǸ¢ÇÑ ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù. COM ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ´Ù´Â °ÍÀº ¼øÀüÈ÷ µðÀÚÀο¡ °üÇÑ ÀÛ¾÷ÀÌ´Ù. ±×¸¸Å­ ¾î·ÆÁö¸¸ ¸Å¿ì Áß¿äÇϱ⵵ ÇÏ´Ù.

ÀÎÅÍÆäÀ̽º´Â ºÒº¯(immutable)ÀÇ ¼ºÁúÀ» °¡Áö°í ÀÖ´Ù. Áï Æ¯Á¤ ÀÎÅÍÆäÀ̽º°¡ ¹èÆ÷µÇ¾î ´Ù¸¥ °÷¿¡¼­ »ç¿ëµÇ±â ½ÃÀÛÇϸé Àý´ë·Î ÀÎÅÍÆäÀ̽º¸¦ º¯°æÇؼ­´Â ¾ÈµÈ´Ù´Â ¾ê±â´Ù.

Ŭ¶óÀÌ¾ðÆ®´Â COM°´Ã¼¸¦ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÇÑ´Ù.

  1. »ç¿ëÇϰíÀÚ ÇÏ´Â COM°´Ã¼ÀÇ CLSID¸¦ ÀÎÀÚ·Î ÁÖ°í CoCreateInstanceÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. À̶§ Ŭ¶óÀÌ¾ðÆ®°¡ ¿øÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ ¸®ÅϵȴÙ.
  2. Ŭ¶óÀÌ¾ðÆ®´Â ÁÖ¾îÁø ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍÀÇ QueryInterface¸¦ ÀÌ¿ëÇÏ¿© ´Ù¸¥ ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅ͸¦ ±¸ÇÑ´Ù. ±×¸®°í ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ´Ù.

À§¿Í °°ÀÌ Å¬¶óÀÌ¾ðÆ®´Â ´ÜÁö ÀÎÅÍÆäÀ̽º¸¸À» »ç¿ëÇÑ´Ù. µû¶ó¼­ ÀÎÅÍÆäÀ̽º¸¦ º¯°æÇÏ´Â °ÍÀº Ŭ¶óÀ̾ðÆ®ÀÇ ÄÚµùÀ» º¯°æÇؾßÇÔÀ» ÀǹÌÇÑ´Ù. ±×·¡¼­ ÀÎÅÍÆäÀ̽º°¡ ¾î¶² ½ÄÀ¸·Îµç ¹ßÇ¥µÇ°Ô µÇ¸é ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ¼ø¼­¸¦ ¹Ù²Û´ÙµçÁö, ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ Àǹ̸¦ ¹Ù²Û´ÙµçÁö, ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ÀÎÀÚÀÇ Å¸ÀÔÀ̳ª °¹¼ö¸¦ ¹Ù²Ù¾î¼­´Â ¾ÈµÈ´Ù.

À§¿Í °°Àº ÀÌÀ¯·Î Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽ºÀÇ µðÀÚÀÎÀº ¸Å¿ì ½ÅÁßÇØ¾ß Çϸç, ¸¹Àº ³ë·ÂÀ» ±â¿ï¿©¾ß ÇÑ´Ù.

ÀÎÅÍÆäÀ̽º µðÀÚÀÎ °¡À̵å

Microsoft´Â ¸¹Àº ¼öÀÇ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØµÎ°í À̸¦ Ç¥ÁØ ÀÎÅÍÆäÀ̽º¶ó°í À̸§ºÙ¿´´Ù. ¿¹¸¦ µé¾î IDataObject, IOleObject µîÀÌ ±×°ÍµéÀÌ´Ù. ±×·¯³ª °æ¿ì¿¡ µû¶ó¼­´Â ±¸ÇöÇϰíÀÚ ÇÏ´Â ¼­ºñ½º¸¦ Ç¥ÁØ ÀÎÅÍÆäÀ̽º°¡ ¼ö¿ëÇÏÁö ¸øÇÒ ¼öµµ ÀÖ´Ù.

À̶§´Â »õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î¾ß Çϸç, À̸¦ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¶ó°í ÇÑ´Ù. Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â °Í ÀÚü´Â ±×¸® ¾î·ÆÁö ¾ÊÀ¸³ª, Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽ºÀÇ µðÀÚÀÎÀº ¸Å¿ì ½ÅÁßÇØ¾ß ÇÑ´Ù.

±âÁ¸ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÀçȰ¿ëÇÒ ¼ö Àִ°¡?

¸ÕÀú Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé±â Àü¿¡, ¹Ýµå½Ã »õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î¾ß Çϴ°¡¶ó´Â °í¹ÎÀ» ÇØ¾ß ÇÑ´Ù.

Microsoft´Â ´ëºÎºÐÀÇ ¼­ºñ½º¿¡ ´ëÇØ¼­ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î µÎ¾ú´Ù. ±×·¯¹Ç·Î ºÎºÐÀûÀ¸·Î Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ Àç»ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ActiveXÄÁÆ®·ÑÀº IOleControlÀ̶ó´Â »õ·Î¿î ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÏÁö¸¸, ±âÁ¸ÀÇ IDataObject, IViewObject¿Í °°Àº ÀÎÅÍÆäÀ̽º¸¦ Àç»ç¿ëÇϱ⵵ ÇÑ´Ù.

ÀÌ·± °íÂûÀÌ ³¡³­ µÚ¿¡µµ ¿©ÀüÈ÷ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º°¡ ÇÊ¿äÇÏ´Ù¸é À̾îÁö´Â »çÇ×µéÀ» °í·ÁÇØ¾ß ÇÑ´Ù.

¼­ºñ½º¸¦ ºÐÇØÇÏ¿© ÀÎÅÍÆäÀ̽º¸¦ ´Ü¼øÇÏ°Ô ¸¸µç´Ù.

»õ·Î¿î ¼­ºñ½º¿¡ ´ëÇØ »õ·Î¿î ÀÎÅÍÆäÀ̽º°¡ ÇÊ¿äÇÏ´Ù¸é ¸ÕÀú ÀÎÅÍÆäÀ̽º ÇÔ¼öµéÀ» ¿­°ÅÇØ º»´Ù. ±×¸®°í ±×°ÍµéÀ» ºÐÇØ(factoring)ÇØ¼­ ´Ü¼øÇÏ°Ô ¸¸µé¾î¾ß ÇÑ´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ºÐÇØ´Â ÀÎÅÍÆäÀ̽ºÀÇ Àç»ç¿ë¼ºÀ» ³ôÀ̰í E_NOTIMPL»ç¿ëÀ» Àû°Ô ÇÑ´Ù.

¿¹¸¦ µé¾î IDataObject¿Í °°Àº ÀÎÅÍÆäÀ̽º´Â ¿ÏÀüÈ÷ ºÐÇØµÇ¾î ¾ÆÁÖ Á¼Àº Àǹ̸¦ °¡Áö´Â ÀÎÅÍÆäÀ̽ºÀÌ´Ù. IDataObject´Â ¿ÀÁ÷ µ¥ÀÌŸÀÇ Ç¥Çö°ú Àü¼Û¿¡¸¸ °ü°èÇÑ´Ù. ºñ½ÁÇÏ°Ô IViewObjectÀÎÅÍÆäÀ̽º´Â µ¥ÀÌŸÀÇ ·»´õ¸µ¿¡¸¸ °ü°èÇÑ´Ù.

¸¸ÀÏ IDataObject¿Í IViewObject°¡ ÇϳªÀÇ ÀÎÅÍÆäÀ̽º·Î ±¸¼ºµÇ¾î ÀÖ¾ú´Ù¸é, ·»´õ¸µÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â ±¸Çö¿¡¼­´Â IViewObject¿¡ ÇØ´çÇÏ´Â ÀÎÅÍÆäÀ̽º ÇÔ¼ö°¡ ¸ðµÎ E_NOTIMPLÀ» ¸®ÅÏÇØ¾ß ÇÒ °ÍÀÌ´Ù.

¶ÇÇÑ IDataObject¿Í °°ÀÌ ´Ü¼øÈ­µÈ ÀÎÅÍÆäÀ̽º´Â ´Ù¸¥ ¼­ºñ½º¿¡ ½±°Ô Àû¿ëÇÒ ¼ö ÀÖÀ¸¸ç, Ŭ¶óÀÌ¾ðÆ®¿¡°Ôµµ ½±°Ô ´Ù°¡°£´Ù. Áï µ¥ÀÌŸ°¡ ÀÖ´Â ¼­ºñ½º´Â IDataObject°¡ ±¸ÇöµÇ¾î ÀÖ´Ù´Â ¾Ï½ÃÀû ±ÔÄ¢À» »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù.

COM°´Ã¼°¡ ¾î¶² ±â´ÉÀ» ±¸ÇöÇÏ´ÂÁö¸¦ ±â´É Ç÷¢À» »ç¿ëÇÏ¿© Ç¥ÇöÇÒ ¼öµµ ÀÖ´Ù. ±×·¯³ª À̰ÍÀº ±ÇÀåµÇÁö ¾Ê´Â´Ù. COMÀº °´Ã¼ÀÇ ±â´ÉÀ» ÁúÀÇÇϱâ À§ÇÑ QueryInterface¸¦ Á¦°øÇϱ⠶§¹®ÀÌ´Ù. QueryInterface¸¦ ÅëÇØ¼­ ºÐÇØµÈ ±â´ÉµéÀ» Áö¿øÇÏ´ÂÁö »ìÆìº¼ ¼ö ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º ÇÔ¼ö´Â ÀǹÌÀûÀ¸·Î ¸íÈ®È÷ Á¤ÀǵǾî¾ß ÇÑ´Ù.

¿¹¸¦ µé¾î IDataObjectÀÇ GetData¶ó´Â ¸â¹öÇÔ¼ö´Â ÀǹÌÀûÀ¸·Î FORMATETC Çü½ÄÀÇ µ¥ÀÌŸ¸¦ STGMEDIUM¿¡ ´ã¾Æ¼­ µ¹·Á´Þ¶ó´Â ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ´Ù. ÇÔ¼öÀÇ Àǹ̿ܿ¡µµ ´ÙÀ½°ú °°Àº »çÇ×µéÀ» ¸íÈ®È÷ Á¤ÀÇÇØ¾ß ÇÑ´Ù.

  1. ÇÔ¼ö ÀÎÀÚ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù. ÀÎÀÚÀÇ ÀÇ¹Ì¿Í ÀÎÀÚÀÇ Á¶°ÇÀÌ ¸í½ÃµÇ¾î¾ß ÇÑ´Ù. ƯÈ÷ Æ÷ÀÎÅÍÀÎ °æ¿ì ¸Þ¸ð¸®¸¦ È£ÃâÃø¿¡¼­ ÇÒ´çÇÏ´ÂÁö, ÇÇÈ£ÃâÃø¿¡¼­ ÇÒ´çÇÏ´ÂÁö, ÇÇÈ£ÃâÃø¿¡¼­ ÇÒ´çÇÏ´Â °æ¿ì ¸Þ¸ð¸®ÀÇ ÇØÁ¦´Â ´©°¡ Ã¥ÀÓÀ» Á®¾ß ÇÏ´ÂÁö µîÀÇ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù.
  2. ¸®Åϰª¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù. ´ëºÎºÐÀÇ ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ °æ¿ì HRESULT¸¦ ¸®ÅÏÇÑ´Ù. ƯÈ÷ ¿¡·¯¸¦ ¸®ÅÏÇÒ °æ¿ì ¾î¶² °æ¿ì¿¡ ¾î¶² ¿¡·¯¸¦ ¸®ÅÏÇÏ´ÂÁö ¸íÈ®ÇÏ°Ô Á¤ÀÇÇØ¾ß ÇÑ´Ù.
  3. COM°´Ã¼ ³»ºÎÀûÀ¸·Î »óŸ¦ °¡Áö°í ÀÖ´Ù¸é, ÇÔ¼öÀÇ È£Ãâ°á°ú·Î COM°´Ã¼°¡ ¾î¶² »óÅ·Π³õ¿©Áö´ÂÁö¸¦ ¸íÈ®È÷ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
  4. ÀçÁøÀÔ(reentrancy)¿¡ °üÇÑ Çã¿ë¿©ºÎ¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù. ÀçÁøÀÔÀ̶õ ¸ÖƼ-¾²·¹µùȯ°æ¿¡¼­ ÇÔ¼öÀÇ È£ÃâÀÌ ¿Ï·áµÇ±â Àü¿¡ ´Ù¸¥ ¾²·¹µå¿¡¼­ ±× ÇÔ¼öÀÇ ½ÇÇà¿¡ µé¾î°¡´Â °æ¿ì¸¦ ÀǹÌÇÑ´Ù. ÀϹÝÀûÀ¸·Î ·ÎÄà ¸®¼Ò½º¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ÀçÁøÀÔ °¡´ÉÇÏÁö¸¸, ±Û·Î¹ú ¸®¼Ò½º¸¦ »ç¿ëÇÏ´Â °æ¿ì ÀçÁøÀÔÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.
  5. ÇÔ¼ö°¡ ¹Ýµå½Ã ±¸ÇöµÇ¾î¾ß ÇÏ´Â °¡µµ ¸í½ÃÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ±¸ÇöÇÏ´Â ÃøÀº E_NOTIMPLÀ» ¸®ÅÏÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.

<Ç¥ 1>Àº ½ÇÁ¦·Î ÀÎÅÍÆäÀ̽º ¸â¹öÇÔ¼ö¸¦ ¾î¶»°Ô Á¤ÀÇÇÏ´ÂÁö¸¦ º¸¿©ÁØ´Ù.

HRESULT WakeUp(HROBOT hRobot, WCHAR *pwcsMsg)
¡¡ ¼³¸í WakeUpÇÔ¼ö´Â ·Îº¿À» ¼ö¸é»óÅ¿¡¼­ Áغñ»óÅ·Π¹Ù²Û´Ù. ±×¸®°í ÀÎÀÚ·Î ÁÖ¾îÁø ¸Þ½ÃÁö¸¦ Ç¥½ÃÇÑ´Ù.
ÀÎÀÚ hRobot ±ú¾î³¯ ·Îº¿ÀÇ ÇÚµé. NULLÀ̾´Â ¾ÈµÈ´Ù.
pwcsMsg ·Îº¿ÀÌ ±ú¾î³¯ ¶§ Ç¥½ÃÇÏ´Â NULL·Î ³¡³ª´Â À¯´ÏÄÚµå ½ºÆ®¸µ. NULLÀÏ °æ¿ì¿¡´Â µðÆúÆ® ½ºÆ®¸µÀ» Ç¥½ÃÇÑ´Ù. µðÆúÆ® ½ºÆ®¸µÀº SetWakeUpStringÇÔ¼ö¿¡¼­ Á¤ÀÇÇÑ´Ù.
¸®Åϰª S_OK
        ÇÔ¼öÀÇ ¼öÇà°á°ú°¡ ¼º°øÀûÀÓ
ERR_ALREADY_READY
        ·Îº¿ÀÌ ÀÌ¹Ì ´ë±â»óÅÂÀÓ
ERR_HW_FAILURE
        ´ë±â»óÅ·ΠÀüȯÇϴµ¥ ¿¡·¯°¡ ¹ß»ýÇßÀ½
E_INVALIDARG
        ÀÎÀÚ°¡ ÀûÀýÇÏÁö ¾ÊÀ½
<Ç¥ 1> ÀÎÅÍÆäÀ̽º ÇÔ¼ö Á¤ÀÇÀÇ ¿¹ (<Âü°íÀÚ·á 1> ¿¡¼­ Àοë)

À̸§À» Àß Á¤ÇØ¾ß ÇÑ´Ù.

COMÀÇ ÀÔÀå¿¡¼­´Â ÀÎÅÍÆäÀ̽º ¸â¹öÇÔ¼öÀÇ À̸§Àº Áß¿äÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé COMÀº ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ ¸î¹øÂ° ÇÔ¼öÀΰ¡¸¸ µûÁö´Â ¹ÙÀ̳ʸ® Ç¥ÁØÀ̱⠶§¹®ÀÌ´Ù.

µû¶ó¼­ ÀÎÅÍÆäÀ̽ºÀÇ ¸â¹öÇÔ¼ö¿¡ À̸§À» Á¤ÇÏ´Â °ÍÀº ¼øÀüÈ÷ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ °ÍÀÌ´Ù. ÇÔ¼öÀÇ Á¤ÀÇ¿¡ ¸Â´Â °£·«ÇÑ À̸§À» ´ë¼Ò¹®ÀÚ¸¦ ¼¯¾î¼­ Á¤ÀÇÇØ µÐ´Ù¸é Ŭ¶óÀÌ¾ðÆ® ÄÚµù¿¡ ¸¹Àº µµ¿òÀ» ÁØ´Ù.

ÀÎÅÍÆäÀ̽ºÀÇ À̸§À» Á¤ÇÒ ¶§´Â µÇµµ·ÏÀÌ¸é »ç¿ëµÇ´Â ¼­ºñ½º¸¦ Á¢µÎ¾î·Î ºÙÀÌ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¾î IOleObject´Â OLE¹®¼­ ¼­ºñ½º¿¡¼­ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽ºÀÓÀ» ¾Ë ¼ö ÀÖ°Ô Çϸç, IMAPIPropertySetÀº MAPI ¼­ºñ½º¿¡ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽ºÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º°¡ ¿­°Å(enumeration) ¸¦ À§ÇÑ °ÍÀ̶ó¸é IEnum...À¸·Î ½ÃÀÛÇÏ´Â À̸§À» ºÙÀÌ´Â °ÍÀÌ °ü·ÊÀÌ´Ù.

¸¸ÀÏ ±âÁ¸ÀÇ ÀÎÅÍÆäÀ̽º¸¦ °³¼±ÇÑ »õ·Î¿î ¹öÀüÀÇ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µç´Ù¸é ¹öÀü ¹øÈ£¸¦ µÚ¿¡ ºÙÀÌ´Â °ÍÀÌ ÁÁ´Ù. ¿¹¸¦ µé¾î ISomeService¸¦ °³¼±ÇÑ ÀÎÅÍÆäÀ̽º¶ó¸é ISomeService2¶ó°í À̸§À» ºÙ¿©¶ó. ISomeServiceEx¿Í °°Àº À̸§Àº °ï¶õÇÏ´Ù. ¿Ö³ÄÇϸé ISomeServiceEx¸¦ °³¼±ÇÑ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé ¶§ À̸§À» ISomeServiceExEx¿Í °°ÀÌ ÁÖ¾î¾ß Çϴϱî.

¸Þ¸ð¸® °ü¸® ±ÔÄ¢À» µû¸£¶ó.

COMÀº Ç¥ÁØ ¸Þ¸ð¸®°ü¸® °´Ã¼¸¦ Á¦°øÇÑ´Ù. ÀÌ °´Ã¼´Â IMalloc ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ °ÍÀ̸ç CoGetMalloc ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¸ð¸® °ü¸®°´Ã¼¸¦ ¾òÀ» ¼ö ÀÖ´Ù. ¶ÇÇÑ »ç¿ëÀÇ ÆíÀǸ¦ À§ÇÏ¿© CoTaskMemAlloc, CoTaskMemFree, CoTaskMemReallocµîÀÇ ÇÔ¼öµµ Áö¿øÇÑ´Ù.

COMÀÌ Ç¥ÁØ ¸Þ¸ð¸® °ü¸®ÀÚ¸¦ Á¦°øÇÏ´Â ÀÌÀ¯´Â, COMÀÌ ´Ù¾çÇÑ È¯°æ¿¡¼­ Àû¿ëµÇ±â ¶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î C++ÀÇ °æ¿ì new·Î ÇÒ´çÇÑ ¸Þ¸ð¸®¿Í mallocÀ¸·Î ÇÒ´çÇÑ ¸Þ¸ð¸®´Â ¼­·Î ȣȯµÉ ¼ö ¾øµíÀÌ, COM¿¡¼­µµ ÀÌ·± »óȲÀÌ ¹ß»ýÇØ¼­´Â ¾ÈµÇ±â ¶§¹®ÀÌ´Ù.

»ç½Ç Ŭ¶óÀÌ¾ðÆ® ³»ºÎ¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í »ç¿ëÇϰųª, ¼­¹ö ³»ºÎ¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ°í »ç¿ëÇÏ´Â °ÍÀº ¾î¶² ¸Þ¸ð¸® °ü¸®ÀÚ¸¦ ½áµµ »ó°üÀº ¾ø´Ù. ±×·¯³ª Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°¡ Åë½ÅÀ» ÇÒ ¶§ (ÁÖ·Î ÇÔ¼öÀÇ ÀÎÀÚ·Î ¸Þ¸ð¸®°¡ Àü´ÞµÉ ¶§)´Â ¹Ýµå½Ã Ç¥ÁØ COM¸Þ¸ð¸® °ü¸®ÀÚ¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

ÇÔ¼öÀÇ ÀÎÀÚ·Î ¸Þ¸ð¸®ºí·°ÀÌ ³Ñ¾î°¥ °æ¿ì ¸î°¡Áö ±ÔÄ¢À» ÁؼöÇØ¾ß ÇÑ´Ù.

  • ÀÔ·ÂÀÎÀÚÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ®°¡ ¸Þ¸ð¸®¸¦ ÇÒ´çÇϰí ÇØÁ¦ÇØ¾ß ÇÑ´Ù.
  • Ãâ·ÂÀÎÀÚÀÇ °æ¿ì ¼­¹ö¿¡ ÀÇÇØ¼­ ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í, Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼­ ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù.
  • ÀÔÃâ·Â ÀÎÀÚÀÇ °æ¿ì Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ ¸Þ¸ð¸®°¡ ÇÒ´çµÇ°í, ¼­¹ö´Â ÀÌ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÒ ¼öµµ ÀÖ°í, ÀçÇÒ´çÇÒ ¼öµµ ÀÖ´Ù. ¾î·µç °á°úÀûÀ¸·Î ¸®ÅÏµÈ ¸Þ¸ð¸®´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÃÖÁ¾ÀûÀ¸·Î ÇØÁ¦ÇØ¾ß ÇÑ´Ù.

½ºÆ®¸µÀº À¯´ÏÄڵ带 »ç¿ëÇ϶ó.

COMÀº ³»ºÎÀûÀ¸·Îµµ ´ë¿ÜÀûÀ¸·Îµµ À¯´ÏÄڵ带 »ç¿ëÇÑ´Ù. À¯´ÏÄÚµå´Â MBCS(Multi-Byte Code System)¿Í ´Þ¸® ¾Æ½Ã¾Æ°è ¹®ÀÚ »Ó ¾Æ´Ï¶ó, ¿µ¾î±Ç ¹®ÀÚµµ 2¹ÙÀÌÆ®¸¦ »ç¿ëÇÑ´Ù. ÀÌ·Î ÀÎÇØ ¾Æ½Ã¾Æ°è ¹®ÀÚ¿Í ¿µ¾î±Ç ¹®ÀÚÀÇ Ç¥Çö Å©±â°¡ Ʋ·Á¼­ »ý±â´Â ÄÚµùÀÇ ¾î·Á¿òÀ» ÇØ°áÇÒ ¼ö ÀÖ´Ù.

À¯´ÏÄÚµå´Â ÇÁ·Î±×·¡¸ÓÀÇ ÆíÀǺ¸´Ùµµ, Àü¼¼°è ¹®ÀÚ¸¦ ÇϳªÀÇ ÄÚµåü°è¿¡ Æ÷ÇÔ½ÃŲ °Í¿¡ ´õ Å« Àǹ̸¦ °¡Áö°í ÀÖ´Ù. COM ÀÎÅÍÆäÀ̽º´Â Àß Á¤Àǵȴٸé Àü¼¼°èÀûÀ¸·Î Åë¿ëµÇ´Â °ÍÀÌ´Ù. µû¶ó¼­ ½ºÆ®¸µÀÇ Ç¥ÇöÀ» À¯´ÏÄÚµå·Î ÇÏ´Â °ÍÀº ÀÚ¿¬½º·¯¿î ÀÏÀÌ´Ù.

Visual C++¿¡¼­ À¯´ÏÄÚµå ¹®ÀÚ µ¥ÀÌŸ´Â WCHAR ȤÀº OLECHAR ŸÀÔÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù. ¶ÇÇÑ ¸®ÅÍ·²(literal)À» À¯´ÏÄÚµå·Î ÁöÁ¤ÇÒ °æ¿ì OLESTR ¸ÅÅ©·Î¸¦ »ç¿ëÇÑ´Ù. ±× ¿Ü¿¡µµ À¯´ÏÄڵ忡¼­ MBCS·Î, ȤÀº ±× ¹Ý´ë·Î º¯È¯ÇÏ´Â ÇÔ¼ö·Î¼­ wcstombs, mbstowcs¿Í °°Àº ÇÔ¼öµéÀÌ ÀÖ´Ù.

½ºÆ®¸µÀ» ¸®ÅÏÇÒ °æ¿ì ·ÎÄÉÀÏÀ» °í·ÁÇ϶ó.

·ÎÄÉÀÏ(locale)Àº »ç¿ë¾ð¾î¸¶´Ù ´Ù¸¥ ¼³Á¤À» ÀǹÌÇÑ´Ù. ¸¸ÀÏ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º°¡ ½ºÆ®¸µÀ» ¸®ÅÏÇØ¾ß ÇÑ´Ù¸é, °ú¿¬ ¾î¶² ¾ð¾î·Î ¸®ÅÏÇÒ °ÍÀΰ¡? ÀϹÝÀûÀ¸·Î ¿µ¾î¸¦ »ç¿ëÇÒ ¼öµµ ÀÖÁö¸¸, »óǰ¼ºÀ» À§Çؼ­ Çѱ¹¾î³ª ÀϺ»¾îµµ Áö¿øÇÒ ¼ö ÀÖÀ¸¸é ÁÁÀ» °ÍÀÌ´Ù.

±×·¯³ª À̸¦ À§Çؼ­ Çѱ¹¾î ¹öÀüÀÇ COMŬ·¡½º, ¿µ¾î ¹öÀüÀÇ COMŬ·¡½º¸¦ µû·Î ¸¸µé ÇÊ¿ä´Â ¾ø´Ù. WIN32¿¡¼­ ·ÎÄÉÀÏ¿¡ °üÇÑ ID¸¦ LCID¶ó´Â ŸÀÔÀ¸·Î Á¤¸®Çصξú±â ¶§¹®¿¡ À̸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼­ LCID¿¡ ÇØ´çÇÏ´Â ½ºÆ®¸µÀ» ¸®ÅÏÇÏ¸é µÈ´Ù.


<±×¸² 2> LCIDÀÇ ±¸¼º

LCID´Â <±×¸² 2>¿Í °°ÀÌ ±¸¼ºµÇ¾î ÀÖ´Ù. Á¤·Ä ID´Â Á¤·Ä(sorting)À» ¾î¶»°Ô ÇÒ °ÍÀÎÁö¸¦ ÁöÁ¤Çϰí, ÁÖ ¾ð¾îÄÚµå¿Í ºÎ ¾ð¾îÄÚµå´Â ½ÇÁ¦·Î »ç¿ëÇÒ ¾ð¾îÄڵ带 ÁöÁ¤ÇÑ´Ù. ÁÖ¾ð¾îÄÚµå¿Í ºÎ¾ð¾îÄڵ带 ÇÕÄ£ 16ºñÆ®¸¦ LANGID¶ó°íµµ ÇÑ´Ù.

WIN32´Â LCID¸¦ ´Ù·ç±â À§ÇÑ ¸¶Å©·ÎµéÀÌ Á¦°øÇÑ´Ù. À̰͵éÀº LCID¸¦ ¸¸µå´Â MAKELCID, LCID·ÎºÎÅÍ LANGID¸¦ »Ì¾Æ³»´Â LANGIDFROMCLSID, LANGID·ÎºÎÅÍ ÁÖ¾ð¾îÄÚµå¿Í ºÎ¾ð¾îÄڵ带 ¾ò¾î³»´Â PRIMARYLANGID¿Í SUBLANGID¸¶Å©·Î µéÀÌ´Ù. ±×¿Ü¿¡µµ µðÆúÆ® LANGID¸¦ ¾ò±â À§ÇÑ API·Î GetSystemDefaultLangID¿Í GetUserDefaultLangID¸¦ Á¦°øÇÑ´Ù.

Á¤·ÄÄÚµå¿Í ÁÖ¾ð¾î/ºÎ¾ð¾î ÄÚµå´Â Visual C++ÀÇ <olenls.h>¿¡ Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î Âü°íÇϱ⠹ٶõ´Ù.

¿¡·¯Äڵ带 Á¤ÀÇÇ϶ó.

ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ¸®ÅϰªÀº ÇÔ¼öÀÇ ½ÇÇà°á°ú¸¦ ¾Ë·ÁÁÖ´Â HRESULT¸¦ Àû¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. HRESULT´Â ºñÆ®º°·Î ±× Àǹ̰¡ ±¸ºÐµÇ¾î ÀÖ´Ù. <Ç¥ 2>°ú <±×¸² 3>¿¡ Çʵ忡 ´ëÇÑ ¼³¸íÀÌ ÀÖ´Ù.

<±×¸² 3> HRESULT ÀÇ ±¸Á¶
ÇÊµå ºñÆ®¼ö ÀǹÌ
S 1 0Àº ¼º°øÀ» 1Àº ¿¡·¯¸¦ ÀǹÌÇÑ´Ù.
R 2 Reserved. 0À̾î¾ß ÇÔ
Facility 13 Code°¡ ¼ÓÇÏ´Â ºÎ·ù¸¦ ÀǹÌÇÑ´Ù. ºÎ·ù´Â À¯ÀÏÇØ¾ß Çϱ⠶§¹®¿¡ Microsoft¿¡¼­¸¸ Á¤ÀÇÇÑ´Ù.
Code 16 ½ÇÁ¦ »óŸ¦ ³ªÅ¸³½´Ù.
<Ç¥ 2> HRESULT ÇʵåÀÇ ÀǹÌ

COMÀº ÀÌ¹Ì E_NOTIMPL°ú °°Àº Ç¥ÁØ ¿¡·¯ÄÚµåµéÀ» Á¤ÀÇÇØ µÎ¾úÁö¸¸, Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¿¡¼­´Â »õ·Î¿î ¿¡·¯Äڵ尡 ÇÊ¿äÇÏ°Ô µÈ´Ù. ±×·¯³ª µÇµµ·ÏÀ̸é Ç¥ÁØ ¿¡·¯ÄÚµåµéÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´Ù½Ã Çѹø ´õ »ý°¢Çؼ­ »õ·Î¿î ¿¡·¯Äڵ尡 ÇÊ¿äÇÏ´Ù¸é FACILITY_ITF ºÎ·ù¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù.

FACILITY_ITF´Â ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ Ãø¿¡¼­ Á¤ÇÏ´Â ¿¡·¯ÄÚµå¶õ ÀǹÌÀÌ´Ù. ÁÖÀÇÇÒ Á¡Àº COMÀº ÀÌ¹Ì FACILITY_ITFÀÇ 0x0000 ~ 0x01FF±îÁöÀÇ ¿µ¿ªÀ» »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î, ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â ÄÚµåÀÇ ¿µ¿ªÀº 0x0200 ~ 0xFFFF±îÁö¶ó´Â Á¡ÀÌ´Ù.

¿¡·¯ÄÚµå´Â ±Ô¾à¿¡ µû¶ó Á¤ÀÇÇÒ ¼ö ÀÖÁö¸¸ ¼º°øÄÚµå´Â »õ·Î Á¤ÀÇÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é ¾î¶² COMŬ¶óÀÌ¾ðÆ® °³¹ß¾ð¾î´Â ¿ÀÁ÷ Ç¥ÁØÀûÀÎ ¼º°øÄڵ常 ÀνÄÇϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ »õ·Î¿î ¼º°øÄڵ带 »ç¿ëÇÒ °æ¿ì ÀÌ·± ȯ°æ¿¡¼­´Â ¼º°øÇß´õ¶óµµ ½ÇÆÐ·Î ÀνÄÇϱ⠶§¹®¿¡ ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º ¸â¹öÇÔ¼ö°¡ HRESULT¸¦ ¸®ÅÏÇÏ´Â °ÍÀº ±Ç°í»çÇ×ÀÌÁö¸¸ ¹Ýµå½Ã ÁöÄÑÁö´Â °ÍÀÌ ÁÁ´Ù. À̰ÍÀº ¿ø°Ý COM°´Ã¼¸¦ »ç¿ëÇÒ ¶§ ƯÈ÷ ±×·¯Çѵ¥, ³×Æ®¿÷ ¹®Á¦·Î ¿ø°Ý COM°´Ã¼ÀÇ È£ÃâÀÌ ½ÇÆÐÇßÀ» °æ¿ì ¸®ÅϰªÀ¸·Î¸¸ ¿¡·¯Äڵ带 ³Ñ±æ ¼ö Àֱ⠶§¹®ÀÌ´Ù.

Ŭ¶óÀ̾ðÆ®ÀÇ ¾ð¾î¸¦ °í·ÁÇ϶ó.

¸¸ÀÏ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽ºÀÇ Å¬¶óÀÌ¾ðÆ®°¡ Visual BasicÀ̳ª, VBScript-x, JavaScript-x¿Í °°Àº ¾ð¾î¸¦ »ç¿ëÇÑ´Ù¸é ÀÎÅÍÆäÀ̽º µðÀÚÀο¡ ¸î°¡Áö Á¦ÇÑÀÌ µû¸¥´Ù.

Visual Basic°ú °°Àº ¾ð¾î´Â IDispatch¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ VB¸¦ °í·ÁÇÑ´Ù¸é °´Ã¼´Â ÀÚµ¿È­°´Ã¼·Î ±¸ÇöµÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª IDispatchÀÇ µð½ºÆÐÄ¡ ·ÎÁ÷Àº ºÒÇÊ¿äÇÑ ºÎÇϰ¡ ¸¹ÀÌ °É¸®¹Ç·Î C++°ú °°Àº ¾ð¾î¸¦ À§Çؼ­ ÀÌÁßÀÎÅÍÆäÀ̽º(dual interface)·Î ±¸ÇöÇÏ´Â °ÍÀÌ ÁÁ´Ù.

ÀÌÁß ÀÎÅÍÆäÀ̽º´Â IDispatch¸¦ °è½ÂÇÏ´Â ÀÎÅÍÆäÀ̽º·Î¼­ C/C++°ú °°Àº ¾ð¾î¿¡¼­´Â Á÷Á¢ ÀÎÅÍÆäÀ̽º ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô Çϰí, Visual Basic°ú °°Àº ¾ð¾î¿¡¼­´Â IDispatch ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.

Visual Basic·ùÀÇ ¾ð¾î´Â COM°´Ã¼°¡ IDispatch¸¸À» ±¸ÇöÇϰí ÀÖ´Ù°í °¡Á¤ÇÑ´Ù. µû¶ó¼­ Visual BasicÀ» À§ÇØ ±¸ÇöÇÏ´Â IDispatch´Â ±×°Í¸¸À¸·Îµµ ¸ðµç ±â´ÉÀ» ÇÒ ¼ö ÀÖµµ·Ï ¹è·ÁÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î IWebBrowser2 (¿ª½Ã ÀÌÁß ÀÎÅÍÆäÀ̽ºÀÌ´Ù)ÀÇ ¸â¹öÇÔ¼ö ExecWB¿Í QueryStatusWB´Â À¥ºê¶ó¿ìÀú °´Ã¼°¡ ±¸ÇöÇÑ IOleCommandTargetÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ°Ô Çϱâ À§ÇÑ ¿£Æ®¸® Æ÷ÀÎÆ®ÀÌ´Ù.

¶ÇÇÑ Visual Basic°ú °°Àº ¾ð¾î´Â C++ÀÇ Å¸ÀÔÀ» ÀνÄÇÏÁö ¸øÇÑ´Ù. µû¶ó¼­ Visual BasicÀÇ Å¸ÀÔÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. À̰͵éÀÌ ¹Ù·Î BSTR, VARIANT, SAFEARRAY¿Í °°Àº °ÍµéÀÌ´Ù. C++¿¡¼­ À̵é ŸÀÔÀ» »ç¿ëÇÏ´Â °ÍÀº ¹«Ã´À̳ª ¼º°¡½Å ÀÏÀÌÁö¸¸ COM°´Ã¼°¡ ³Î¸® ¾²ÀÌ±æ ¹Ù¶õ´Ù¸é ÀÌÁ¤µµ´Â °í»ýÇØÁÖ¾î¾ß ÇÑ´Ù.

Visual BasicÀº C++½ÄÀÇ ±¸Á¶Ã¼¸¦ Áö¿øÇÏÁö ¾Ê´Â´Ù. µû¶ó¼­ ÇÔ¼öÀÇ ÀÎÀÚ³ª °á°ú·Î ±¸Á¶Ã¼¿Í °°Àº Çü½ÄÀ» »ç¿ëÇØ¾ß ÇÑ´Ù¸é, ÀÌ ±¸Á¶Ã¼ÀÇ ¸â¹ö¸¦ ÇÁ·ÎÆÛƼ·Î ´ëüÇÑ ÀÚµ¿È­°´Ã¼¸¦ µû·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù. ÀÌ ÀÚµ¿È­°´Ã¼ÀÇ IDispatch¸¦ ÅëÇØ¼­ Visual BasicÀº ¸â¹öµé¿¡°Ô Á¢±ÙÇÒ ¼ö ÀÖ´Ù.

ÄݹéÀÇ ¼³°è

Äݹé(callback)Àº ¼­ºñ½º¸¦ ÀÌ¿ëÇϰí Àִ Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹ö¿¡ ÀÇÇØ È£ÃâµÇ´Â ¸ÞÄ«´ÏÁòÀ» ÀǹÌÇÑ´Ù. COM¿¡¼­´Â ¼­¹öÀÇ ÀÔÀå¿¡¼­ outgoing ÀÎÅÍÆäÀ̽º¶ó°í ÇÑ´Ù.

ÃʱâÀÇ COM¿¡¼­´Â ÄÝ¹é ¸ÞÄ«´ÏÁò¿¡ ´ëÇÑ Ç¥ÁØÀÌ ¾ø¾ú±â ¶§¹®¿¡ IDataObjectÀÇ DAdvise¿Í °°Àº ½ÄÀ¸·Î ÀÎÅÍÆäÀ̽º¸¶´Ù ÇÊ¿äÇÑ ÄÝ¹é ¸ÞÄ«´ÏÁòÀ» ±¸ÇöÇß¾ú´Ù. ±×·¯³ª ÀÌÈÄ COMÀº ¿¬°áµÇ´Â °´Ã¼ (Connectable Object)¶ó´Â ¸ÞÄ«´ÏÁòÀ» ¼Ò°³Çß´Ù.

¿¬°áµÇ´Â °´Ã¼ ¸ÞÄ«´ÏÁòÀº ¼­¹öÃøÀÇ IConnectionPoint¿Í À̸¦ °ü¸®ÇÏ´Â IConnectionPointContainer ±×¸®°í Ŭ¶óÀÌ¾ðÆ® ÃøÀÇ ½ÌÅ©(sink) ÀÎÅÍÆäÀ̽º ±¸ÇöÀ¸·Î ÀÌ·ç¾îÁø´Ù.

IConnectionPoint´Â Ŭ¶óÀÌ¾ðÆ® Ãø¿¡ ±¸ÇöµÇ´Â ½ÌÅ© ÀÎÅÍÆäÀ̽º¿Í ¸ÊÇεȴÙ. ±×·¡¼­ ¼­¹ö°¡ ¹º°¡¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ¾Ë·ÁÁÖ¾î¾ß ÇÒ ¶§ (À̺¥Æ®³ª Å뺸) IConnectionPoint¿¡ ÀúÀåµÈ ½ÌÅ© ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍÀÇ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. Áï ÄݹéÀ» È£ÃâÇÏ´Â °ÍÀÌ´Ù.

Visual Basic¿¡¼­ »ç¿ëÇÏ´Â À̺¥Æ®´Â ¹Ù·Î ÀÌ ¿¬°áµÇ´Â °´Ã¼ ¸ÞÄ«´ÏÁòÀ» IDispatch·Î ±¸ÇöÇÑ °ÍÀÌ´Ù. µû¶ó¼­ Visual Basic¿¡¼­ »ç¿ëµÇ¾î¾ß ÇÏ´Â ÀÎÅÍÆäÀ̽º¶ó¸é ¿¬°áµÇ´Â °´Ã¼ ¸ÞÄ«´ÏÁòÀ» »ç¿ëÇÏ¿© ÄݹéÀ» ¼³°èÇØ¾ß ÇÑ´Ù.

In-Proc¼­¹ö³Ä Local¼­¹ö³Ä

COMÀº À§Ä¡Åõ¸í¼º(location transparency)À» Á¦°øÇÑ´Ù. À§Ä¡Åõ¸í¼ºÀ̶õ Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°¡ °°Àº ÇÁ·Î¼¼½º ³»¿¡ ÀÖµç(ÀÎÇÁ·Ï ¼­¹ö), ÇÑ ÄÄÇ»Åͳ»ÀÇ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÖµç(·ÎÄà ¼­¹ö), ´Ù¸¥ ÄÄÇ»ÅÍ¿¡ ÀÖµç(¸®¸ðÆ® ¼­¹ö) °ü°è¾øÀÌ µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î COM°´Ã¼¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

±×·¯³ª Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °´Ã¼°¡ ÀÎÇÁ·Ï ¼­¹ö·Î ±¸ÇöµÉ °ÍÀΰ¡, ·ÎÄà ¼­¹ö·Îµµ ±¸ÇöµÉ °ÍÀΰ¡¿¡ µû¶ó Â÷ÀÌÁ¡ÀÌ ¾à°£ ÀÖ´Ù.

¿ì¼± ÀÎÇÁ·Ï ¼­¹öÀÎ °æ¿ì Ŭ¶óÀÌ¾ðÆ®¿Í °°Àº ¸Þ¸ð¸® °ø°£¿¡ Äڵ尡 À§Ä¡Çϱ⠶§¹®¿¡ ·ÎÄü­¹ö¿¡ ºñÇØ ´Ü¼øÇÏ°í ½ÇÇà¼Óµµµµ ºü¸£´Ù.

¸¸ÀÏ ÀÎÅÍÆäÀ̽ºÀÇ ¸â¹öÇÔ¼ö°¡ HDC³ª HWND¿Í °°Àº ÇÁ·Î¼¼½º ³»ºÎÀÇ ¸®¼Ò½º¸¦ ÀÎÀÚ·Î °¡Áø´Ù¸é ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ COM°´Ã¼´Â ¹Ýµå½Ã ÀÎÇÁ·Ï ¼­¹ö¿©¾ß¸¸ ÇÑ´Ù. ¸¸¾à Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î¼¼½º ³»ºÎÀÇ ¸®¼Ò½º¸¦ »ç¿ëÇØ¾ß ÇÏÁö¸¸, COM°´Ã¼´Â ·ÎÄü­¹ö·Î ±¸ÇöÇØ¾ß ÇÑ´Ù¸é ÀÎÇÁ·Ï Çڵ鷯¸¦ µû·Î ±¸ÇöÇØ¼­ ó¸®ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

¶ÇÇÑ ·ÎÄà ¼­¹ö·Î ±¸ÇöµÉ ¼öµµ ÀÖ´Â Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽ºÀÇ °æ¿ì ÀÎÀÚÀÇ ¸¶¼£¸µ(marshalling)À» °í·ÁÇØ¾ß ÇÑ´Ù. ¸¶¼£¸µ ÄÚµå´Â IDLÆÄÀϷκÎÅÍ ¸¸µé¾îÁö±â ¶§¹®¿¡ ÀÎÅÍÆäÀ̽º Á¤ÀÇ´Â IDL·Î ÀÛ¼ºÇÏ´Â °ÍÀÌ ¿©·¯¸ð·Î Æí¸®ÇÏ´Ù.

¹Ì¹¦ÇÑ »çÇ×À¸·Î ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ÀÎÀÚ°¡ ÂüÁ¶¿¡ ÀÇÇÑ È£Ãâ(call by reference)·Î ³Ñ¾î°¥ °æ¿ì¿¡ ÀÎÇÁ·Ï ¼­¹ö¿Í ·ÎÄü­¹öÀÇ Â÷À̰¡ ÀÖ´Ù. ÀÎÇÁ·Ï ¼­¹öÀΰæ¿ì ÂüÁ¶·Î ³Ñ¾î°£ ºÎºÐÀ» ÇÔ¼ö¿¡¼­ º¯°æÇÒ °æ¿ì, ±×°ÍÀº Áï½Ã Ŭ¶óÀÌ¾ðÆ® Ãø¿¡ ¾÷µ¥ÀÌÆ®µÈ´Ù. ¿¹¸¦ µé¸é ÀÎÀÚ·Î ¸Þ¸ð¸®ÀÇ ¾î¶² ºÎºÐ¿¡ ´ëÇÑ Æ÷ÀÎÅͰ¡ ³Ñ¾î°¬°í, ÀÎÅÍÆäÀ̽º ÇÔ¼ö°¡ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â ÁÖ¼ÒÀÇ ³»¿ëÀ» ¹Ù²Ù¾ú´Ù¸é, Ŭ¶óÀÌ¾ðÆ® Ãø¿¡¼­ º¼ ¶§ ÀÌ º¯°æÀº Áï½Ã ¹Ý¿µµÈ´Ù.

±×·¯³ª ·ÎÄà ¼­¹ö¸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ °æ¿ì ÀÎÀÚ·Î ³Ñ°ÜÁø Æ÷ÀÎÅÍÀÇ ¸Þ¸ð¸® ºí·°ÀÌ º¹»çµÇ¾î ¼­¹ö·Î ³Ñ°ÜÁö±â ¶§¹®¿¡ ¼­¹öÀÇ ¸â¹öÇÔ¼ö°¡ ¸Þ¸ð¸® ºí·°ÀÇ ³»¿ëÀ» ¹Ù²Ù´õ¶óµµ Áï½Ã ¾÷µ¥ÀÌÆ® µÇÁö ¾Ê´Â´Ù. ¾÷µ¥ÀÌÆ® µÇ´Â ½ÃÁ¡Àº ÇÔ¼öÀÇ ½ÇÇàÀÌ ³¡³ª°í Ŭ¶óÀÌ¾ðÆ® ÃøÀÇ ÇÁ·Ï½Ã(proxy)°¡ È£ÃâµÉ ¶§ÀÌ´Ù.

±×·¯¹Ç·Î Ŭ¶óÀÌ¾ðÆ®´Â ÀÎÅÍÆäÀ̽ºÀÇ ¸â¹öÇÔ¼ö¸¦ È£ÃâÇϰí, ´Ù¸¥ ¾²·¹µå¿¡¼­ ÀÎÀÚ·Î ³Ñ°ÜÁØ ¸Þ¸ð¸®ÀÇ ³»¿ëÀ» ÂüÁ¶ÇÏ´Â ½ÄÀÇ ÄÚµùÀ» ÇØ¼­´Â °ï¶õÇÏ´Ù. (À§Ä¡Åõ¸í¼ºÀÌ ±úÁø´Ù)

¸¶¼£¸µÀÇ °í·Á

¸¶¼£¸µ(marshalling) Àº ¡°Á¤·Ä¡±À̶ó´Â ÀǹÌÀÌ´Ù. ¸¶¼£¸µÀº Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö°¡ ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÖÀ» ¶§ Ŭ¶óÀ̾ðÆ®ÀÇ µ¥ÀÌŸ(ÁÖ·Î ÀÎÀÚ)¸¦ ¼­¹ö·Î Àü´ÞÇØÁÖ´Â ¹æ¹ýÀ» ÁöĪÇÑ´Ù. ÀÌ ¶§ Ŭ¶óÀ̾ðÆ®ÀÇ µ¥ÀÌŸ°¡ ÀûÀýÇÏ°Ô Á¤·ÄµÇ±â ¶§¹®¿¡ ¸¶¼£¸µÀ̶ó´Â ¿ë¾î°¡ »ç¿ëµÇ´Â °Í °°´Ù.

±×·±µ¥ ¸¶¼£¸µÀº ÀÚµ¿ÀûÀ¸·Î ÀÌ·ç¾îÁö´Â °ÍÀº ¾Æ´Ï´Ù. ±×·¡¼­ ¾Ë°í½ÍÁö ¾Ê¾Æµµ ¸¶¼£¸µ¿¡ ´ëÇØ¼­´Â ¹Ýµå½Ã ¾Ë¾Æ¾ß ³ªÁß¿¡ ÈÄȸÇÏÁö ¾Ê´Â´Ù. ¸¶¼£¸µÀÌ ¹®Á¦°¡ µÇ´Â °æ¿ì´Â ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ ÀÎÀÚ·Î ¸Þ¸ð¸® ºí·°À» ³Ñ±â´Â °æ¿ì´Ù. ÀÌ °æ¿ì º¸Åë ¸Þ¸ð¸®ºí·°ÀÇ Æ÷ÀÎÅÍ¿Í Å©±â¸¦ ÀÎÀÚ·Î ³Ñ±ä´Ù. (½ºÆ®¸µÀÇ °æ¿ì ¸Þ¸ð¸®ºí·°ÀÇ ³¡À» NULL°ªÀ¸·Î ÆÇ´ÜÇÒ ¼ö ÀÖÀ¸¹Ç·Î Å©±â¸¦ ³Ñ±âÁö´Â ¾Ê´Â´Ù)

À̶§ ¼­¹öÀÇ ÇÁ·Ï½Ã´Â ¸Þ¸ð¸®ºí·°ÀÇ Å©±â¸¸Å­À» ¾ò¾î¼­ ¸¶¼£¸µÀ» ÇÑ´Ù. ¸¶¼£¸µµÈ ÀÎÀÚÁ¤º¸´Â IPC(Inter-Process Communication)³ª RPC(Remote Procedure Call)¸¦ ÅëÇØ ¼­¹öÀÇ ½ºÅÓ(stub)À¸·Î Àü´ÞµÈ´Ù. ½ºÅÓÀº ¸¶¼£¸µµÈ ÀÎÀÚÁ¤º¸¸¦ ¾ð¸¶¼£¸µ(unmarshalling)ÇÏ¿© ÀÎÀÚ ¸Þ¸ð¸®ºí·°À» ÀÎÅÍÆäÀ̽º ¸â¹öÇÔ¼öÀÇ ÀÎÀÚ·Î ³Ñ°ÜÁØ´Ù.

IDL(Interface Definition Language)¿¡ ÀÌ·¯ÇÑ ¸¶¼£¸µÀ» À§ÇÑ ¹®¹ýÀÌ ÁغñµÇ¾î ÀÖ´Ù. ´ÙÀ½¿¡ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º°¡ ¿ø°ÝÀ¸·Î »ç¿ëµÉ ¶§¸¦ ´ëºñÇØ ¾î¶² ½ÄÀ¸·Î IDLÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö Á¤¸®Çß´Ù.

¸ðµç enum»ó¼ö¿¡ ´ëÇØ¼­ [v1_enum] ¼Ó¼ºÀ» »ç¿ëÇ϶ó.

IDLÀº enum»ó¼ö¸¦ µðÆúÆ®·Î 16ºñÆ®·Î ó¸®ÇÑ´Ù. ±×·±µ¥ 32ºñÆ® ȯ°æ¿¡¼­´Â enum»ó¼ö¸¦ 32ºñÆ®·Î ÇÏ´Â °ÍÀÌ ¸¶¼£¸µÇÒ ¶§ ´õ È¿À²ÀûÀÌ´Ù. µû¶ó¼­ ¸ðµç enum»ó¼ö¿¡ ´ëÇØ¼­´Â [v1_enum]¼Ó¼ºÀ» »ç¿ëÇ϶ó.

[length_is]¿Í [size_is]¸¦ Ȱ¿ëÇÒ °Í.

Ŭ¶óÀÌ¾ðÆ®¿¡¼­ ¸Þ¸ð¸®ºí·°À» ÀÎÀÚ·Î ³Ñ±æ¶§, COMÀÇ ¸¶¼£¸µ¿¡ ÀÇÇØ¼­ ¸Þ¸ð¸®ºí·°ÀÌ ¼­¹öÃøÀÇ ½ºÅÓÀ¸·Î º¹»çµÈ´Ù. À̶§ °í·ÁÇØ¾ß ÇÒ µÎ°¡Áö »çÇ×ÀÌ ÀÖ´Ù. ù°´Â ½ºÅÓÂÊ¿¡ ¾ó¸¶¸¸Å­ÀÇ ¸Þ¸ð¸®ºí·°À» ÇÒ´çÇØ¾ß Çϴ°¡À̰í, µÑ°´Â ½ÇÁ¦·Î IPC³ª RPC¸¦ ÅëÇØ ¾ó¸¶¸¸Å­ÀÇ µ¥ÀÌŸ°¡ Àü¼ÛµÇ¾î¾ß Çϴ°¡ÀÌ´Ù.

ºñ½ÁÇÑ ¾ê±â°°Áö¸¸ ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é Æ²¸®´Ù. ¿¹¸¦ µé¾î¼­ Ŭ¶óÀÌ¾ðÆ®°¡ ÇÒ´çÇÑ ¸Þ¸ð¸®ºí·°ÀÌ ¼­¹öÃø¿¡¼­ º¯°æµÇÁö ¾Ê°í ÀÐÈ÷±â¸¸ ÇÑ´Ù¸é ¸Þ¸ð¸®ºí·°À» ±×¸¸Å­ ÇÒ´çÇϰí, µ¥ÀÌŸµµ Àü¼ÛµÇ¾î¾ß ÇÑ´Ù. ±×·¯³ª Ŭ¶óÀÌ¾ðÆ®°¡ ÇÒ´çÇÑ ¸Þ¸ð¸®¿¡ ¼­¹öÃø¿¡¼­ ¾²±â¸¸ ÇÑ´Ù¸é ¸Þ¸ð¸®ºí·°¸¸ ÇÒ´çÇϰí, µ¥ÀÌŸ¸¦ Àü¼ÛÇÒ ÇÊ¿ä´Â ¾ø´Ù.

¸Þ¸ð¸®ºí·°ÀÇ ÇÒ´ç¿¡ °ü°èµÈ IDL¼Ó¼ºÀº [size_is]¿Í [max_is]°¡ ÀÖ´Ù. ºñ½ÁÇÑ ÀǹÌÀÌÁö¸¸ [size_is]´Â ¹è¿­¿ä¼ÒÀÇ °¹¼ö¸¦ ÁöÁ¤Çϰí, [max_is]´Â ¹è¿­ÀÇ ÃÖ´ë À妽º¸¦ ÁöÁ¤ÇÑ´Ù. [size_is(n)]°ú [max_is(n-1)]Àº °°Àº ÀǹÌÀÌ´Ù.

Àü¼Û·®¿¡ °ü°èµÈ IDL¼Ó¼ºÀº [length_is]¿Í [first_is], [last_is]°¡ ÀÖ´Ù. [length_is]´Â Àü¼ÛµÇ¾î¾ß ÇÒ ¹è¿­¿ä¼ÒÀÇ °¹¼ö¸¦ ÁöÁ¤Çϰí, [first_is]¿Í [last_is]´Â °¢°¢ Àü¼ÛµÇ¾î¾ß ¹è¿­¿ä¼ÒÀÇ À妽º ¹üÀ§¸¦ ÁöÁ¤ÇÑ´Ù.

µû¶ó¼­ Ŭ¶óÀÌ¾ðÆ®°¡ ÇÒ´çÇÑ ¸Þ¸ð¸®¸¦ ¼­¹öÃø¿¡¼­ ¾²±â¸¸ ÇÑ´Ù¸é, [size_is]¸¸À» ±â·ÏÇØ¼­ ºÒÇÊ¿äÇÑ µ¥ÀÌŸ Àü¼ÛÀ» ¸·À» ¼ö ÀÖ´Ù.

±×·¯³ª ÇÔ¼öÀÇ ÀÎÀÚ·Î ¹è¿­ÀÇ »ó¼öÅ©±â¸¦ ÁöÁ¤ÇÑ´Ù¸é [size_is]³ª [length_is]¸¦ ¾²´Â °ÍÀÌ ºñÈ¿À²ÀûÀÌ´Ù.

// ¹è¿­ÀÇ Å©±â°¡ »ó¼ö·Î ÁöÁ¤µÈ °æ¿ì
HRESULT Proc([in] short Arr[MAX_SIZE]);

// [size_is]¸¦ »ç¿ëÇØµµ µÇÁö¸¸ ºñÈ¿À²ÀûÀÌ´Ù.
HRESULT Proc3([in size_is(MAX_SIZE)] short Arr[] );

[ptr] Æ÷ÀÎÅÍ »ç¿ëÀ» ÀÚÁ¦ÇÒ °Í.

RPC¿¡¼­ »ç¿ëÇÏ´Â Æ÷ÀÎÅÍ´Â ¼º´ÉÇâ»óÀ» À§Çؼ­ ¼¼°¡Áö·Î ³ª´©¾îÁø´Ù. ±× ¼¼°¡Áö´Â °¢°¢ [ref], [unique], [ptr] ¼Ó¼º¿¡ ÀÇÇØ ÁöÁ¤µÈ´Ù.

[ref] Æ÷ÀÎÅÍ´Â ´ÙÀ½°ú °°Àº Ư¡À» °®´Â´Ù.

  • Æ÷ÀÎÅÍ´Â Ç×»ó À¯È¿ÇÑ ÁÖ¼Ò¸¦ °¡¸®Å°°í ÀÖ´Ù. Áï NULL°°Àº °ÍÀ̾´Â ¾ÈµÈ´Ù. µû¶ó¼­ Ç×»ó ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
  • È£Ãâ°úÁ¤¿¡¼­ Æ÷ÀÎÅÍÀÇ °ªÀÌ ¹Ù²î¾î¼­´Â ¾ÈµÈ´Ù. Áï È£Ãâ ÀüÈÄ Æ÷ÀÎÅÍ´Â °°Àº ¸Þ¸ð¸®¿µ¿ªÀ» °¡¸®ÄÑ¾ß ÇÑ´Ù.
  • ¾ó¶óÀ̾î½Ì(aliasing)À» Çã¿ëÇÏÁö ¾Ê´Â´Ù.

Æ÷ÀÎÅÍ ¾ó¶óÀ̾î½ÌÀ̶õ Æ÷ÀÎÅÍ a¸¦ Æ÷ÀÎÅÍ b¿¡ ´ëÀÔÇØ¼­ a¿Í b°¡ °°Àº ¸Þ¸ð¸®¸¦ °¡¸®Å°µµ·Ï ÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. RPC¿¡¼­ÀÇ Æ÷ÀÎÅÍ ¾ó¶óÀ̾î½ÌÀº ½ÇÁ¦·Î °°Àº ¸Þ¸ð¸®¸¦ °¡¸®Å°´ÂÁö °Ë»çÇÏ´Â ·çƾÀÌ ½ÇÇàµÇ¾î¾ß Çϱ⠶§¹®¿¡ »ó´çÇÑ ºÎÇϰ¡ ¼Ò¿äµÈ´Ù.

¾î·µç [ref]Æ÷ÀÎÅÍ´Â ´Ü¼øÈ÷ Ŭ¶óÀÌ¾ðÆ®°¡ ÇÒ´çÇÑ ¸Þ¸ð¸®ºí·°À» ¼­¹ö¿¡ ³Ñ±â°í ¼­¹ö´Â Æ÷ÀÎÅ͸¦ ¼Õ´ëÁö ¾Ê´Â °æ¿ì(Áï ÀÔ·ÂÀÎÀÚ) »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¹Àº Á¦ÇÑÀÌ Àֱ⠶§¹®¿¡ °¡Àå È¿À²ÀûÀÎ Æ÷ÀÎÅÍÀÌ´Ù.

[unique] Æ÷ÀÎÅÍ´Â NULLÀ» °¡Áú ¼öµµ ÀÖ°í, ¼­¹öÃø¿¡¼­ º¯°æµÉ ¼öµµ ÀÖÁö¸¸ ¾ó¶óÀ̾î½ÌÀº Áö¿øÇÏÁö ¾Ê´Â´Ù. Áï Ŭ¶óÀÌ¾ðÆ®°¡ Æ÷ÀÎÅÍÀÇ Æ÷ÀÎÅ͸¦ ÀÎÀÚ·Î ³Ñ±â°í ¼­¹ö°¡ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ´Â °æ¿ì(Áï Ãâ·ÂÀÎÀÚ)¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

[ptr] Æ÷ÀÎÅÍ´Â ¿ÏÀüÆ÷ÀÎÅÍ(full pointer) ¶ó°íµµ ºÒ¸®¿ìµíÀÌ, C++ÀÇ Æ÷ÀÎÅͱâ´ÉÀ» ¸ðµÎ °¡Áö°í ÀÖ´Ù. Áï [unique]Æ÷ÀÎÅÍÀÇ ±â´É¿¡ ¾ó¶óÀ̾î½Ì ±â´ÉÀ» Æ÷ÇÔÇÑ °ÍÀÌ´Ù. ±×·¯³ª ¾Õ¿¡¼­µµ ¸»ÇßµíÀÌ Æ÷ÀÎÅÍÀÇ ¾ó¶óÀ̾î½ÌÀº ¼º´É¿¡ ¹®Á¦°¡ Àֱ⠶§¹®¿¡ µÇµµ·ÏÀ̸é [ptr]Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.

¸¶Ä¡¸é¼­

»õ·Î¿î ¼­ºñ½º¸¦ À§Çؼ­ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â °æ¿ì´Â Á¾Á¾ ÀÖ´Ù. À̶§ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀÌ ÆíÀǸ¸À» µûÁ®¼­ ½±°Ô ½±°Ô ÀÎÅÍÆäÀ̽º¸¦ µðÀÚÀÎÇÏ´Â °ÍÀ» ¸¹ÀÌ º¸¾Æ¿Ô´Ù. ±×·¯³ª °á±¹¿¡´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÚ²Ù ¼Õº¸°Ô µÇ°í, ±×·¯´Ù º¸´Ï Ŭ¶óÀÌ¾ðÆ® ÄÚµùµµ ÀÚ²Ù °íÃÄ¾ß Çϰí, ÀÌ·¯´Ù°¡ ¹ö±×¿¡ ÈÖ¸»·Á Çì¾î³ªÁö ¸øÇÏ´Â °æ¿ì°¡ Çã´ÙÇÏ´Ù.

µÇµµ·ÏÀ̸é Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °ÍÀ» ±ÇÇÏ°í ½Í´Ù. ±×·¯³ª Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù¸é ÀÎÅÍÆäÀ̽º µðÀÚÀο¡ ¸¹Àº ½Ã°£À» ÅõÀÚÇ϶ó°í ±ÇÇÏ°í ½Í´Ù.

Âü°íÀÚ·á

  1. Designing COM Interface -- Charlie Kindel - MSDN Technical Articles
  2. Interface and Component Design with COM - Mary Kirtland - http://www.microsoft.com/com/slides/comdsgn.zip
  3. Inside COM ? Dale Rogerson - Microsoft Press
  4. Inside ATL/COM Programming with Visual C++ -- Àüº´¼± - »ï¾çÃâÆÇ»ç

   

 
´º½º¿Í Á¤º¸ ¡¤ ÀÚÀ¯ °Ô½ÃÆÇ ¡¤ °¡ÀÔ ÀÎ»ç ¡¤ °øÁö»çÇ× ¡¤ AJAX ÇнÀ ¡¤ ASP Áú¹® ¡¤ ASP ÇнÀ ¡¤ MYSQL ÇнÀ ¡¤ SQLSERVER ÇнÀ ¡¤ ¿À¶óŬ ÇнÀ ¡¤ µ¥ÀÌŸº£À̽º ÇнÀ ¡¤ ¾×¼Ç½ºÅ©¸³Æ® ÇнÀ ¡¤ ¾×¼Ç½ºÅ©¸³Æ® Áú¹® ¡¤ ÆÛ¿Â Ç÷¡½Ã ¡¤ Ç÷¡½Ã ³×ºñ°ÔÀÌ¼Ç ¡¤ Ç÷¡½Ã ¼Ò½º ¡¤ Ç÷¡½Ã ¿¬±¸½Ç ¡¤ Ç÷¡½Ã Áú¹® ¡¤ Ç÷¡½Ã °ÔÀÓ ¡¤ Ç÷¡½Ã ÀÎÆ®·Î ¡¤ Ç÷¡½Ã ÀÌÆåÆ® ¡¤ ÀÚÀÛ Ç÷¡½Ã ¡¤ ű×,HTML Áú¹® ¡¤ ű×,HTML ÇнÀ ¡¤ ÀÚ¹Ù,JSP ÇнÀ ¡¤ ÀÚ¹Ù,JSP Áú¹® ¡¤ ÀÚ¹Ù½ºÅ©¸³Æ® ÇнÀ ¡¤ ÀÚ¹Ù½ºÅ©¸³Æ® ¼Ò½º ¡¤ ÀÚ¹Ù½ºÅ©¸³Æ® Áú¹® ¡¤ Æ÷Åä¼¥ Áú¹® ¡¤ Æ÷Åä¼¥ ÇнÀ ¡¤ Ãßõ À̹ÌÁö ¡¤ ÀÚÀÛ À̹ÌÁö ¡¤ ÆÛ¿Â À̹ÌÁö ¡¤ PHP Áú¹® ¡¤ PHP ÇÔ¼ö ¡¤ PHP ÇнÀ ¡¤ ÇÁ·Î±×·¡¹Ö ÇнÀ ¡¤ ÀÎÅͳݼ­¹ö ÇнÀ ¡¤ ÀÎÅͳݼ­¹ö Áú¹®¡¤ Ç÷¡½Ã »ùÇà ¼Ò½º ¡¤ Ç÷¡½Ã äÆÃ¹æ ¡¤ Ç÷¡½Ã ¹Ì´ÏȨÇÇ ¡¤ Ç÷¡½Ã °¶·¯¸® ¡¤ Ç÷¡½Ã RSS¸®´õ ¡¤ Ç÷¡½Ã PHP »çÀü ¡¤ Ç÷¡½Ã ¿ìÆí¹øÈ£ ã±â ¡¤ Ç÷¡½Ã ÇÑÀÚ°ÔÀÓ ¡¤ Ç÷¡½Ã ´Þ·Â°ú½Ã°è ¡¤ Ç÷¡½Ã Æ÷Åä¶óÀ̺귯¸® ¡¤ ·£´ýÀ̹ÌÁö ¡¤ Ç÷¡½Ã ´Þ·Â°ú½Ã°è ¡¤ ÇÑ±Û µµ¸ÞÀÎ ¡¤ ³×À̹ö ºí·Î±× ½ºÅ©·¦ ¡¤ ½ÎÀÌ¿ùµå ¹Ì´ÏȨÇÇ °¶·¯¸® ¡¤ ½ÎÀÌ¿ùµå ¹Ì´ÏȨÇÇ µî·Ï ¡¤ ÇÁ·Î°ÔÀÌ¸Ó ·©Å© ¡¤ ȨÆäÀÌÁöÁ¤º¸ ºí·Î±×
Copyright ¨Ï hompy.info. All rights reserved.