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°´Ã¼¸¦ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÇÑ´Ù.
- »ç¿ëÇϰíÀÚ ÇÏ´Â COM°´Ã¼ÀÇ CLSID¸¦ ÀÎÀÚ·Î ÁÖ°í CoCreateInstanceÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. À̶§ Ŭ¶óÀÌ¾ðÆ®°¡ ¿øÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÇ Æ÷ÀÎÅͰ¡ ¸®ÅϵȴÙ.
- Ŭ¶óÀÌ¾ðÆ®´Â ÁÖ¾îÁø ÀÎÅÍÆäÀ̽º Æ÷ÀÎÅÍÀÇ 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¿¡ ´ã¾Æ¼ µ¹·Á´Þ¶ó´Â ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ´Ù. ÇÔ¼öÀÇ Àǹ̿ܿ¡µµ ´ÙÀ½°ú °°Àº »çÇ×µéÀ» ¸íÈ®È÷ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
- ÇÔ¼ö ÀÎÀÚ¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù. ÀÎÀÚÀÇ ÀÇ¹Ì¿Í ÀÎÀÚÀÇ Á¶°ÇÀÌ ¸í½ÃµÇ¾î¾ß ÇÑ´Ù. ƯÈ÷ Æ÷ÀÎÅÍÀÎ °æ¿ì ¸Þ¸ð¸®¸¦ È£ÃâÃø¿¡¼ ÇÒ´çÇÏ´ÂÁö, ÇÇÈ£ÃâÃø¿¡¼ ÇÒ´çÇÏ´ÂÁö, ÇÇÈ£ÃâÃø¿¡¼ ÇÒ´çÇÏ´Â °æ¿ì ¸Þ¸ð¸®ÀÇ ÇØÁ¦´Â ´©°¡ Ã¥ÀÓÀ» Á®¾ß ÇÏ´ÂÁö µîÀÇ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù.
- ¸®Åϰª¿¡ ´ëÇÑ ¸íÈ®ÇÑ Á¤Àǰ¡ ÀÖ¾î¾ß ÇÑ´Ù. ´ëºÎºÐÀÇ ÀÎÅÍÆäÀ̽º ÇÔ¼öÀÇ °æ¿ì HRESULT¸¦ ¸®ÅÏÇÑ´Ù. ƯÈ÷ ¿¡·¯¸¦ ¸®ÅÏÇÒ °æ¿ì ¾î¶² °æ¿ì¿¡ ¾î¶² ¿¡·¯¸¦ ¸®ÅÏÇÏ´ÂÁö ¸íÈ®ÇÏ°Ô Á¤ÀÇÇØ¾ß ÇÑ´Ù.
- COM°´Ã¼ ³»ºÎÀûÀ¸·Î »óŸ¦ °¡Áö°í ÀÖ´Ù¸é, ÇÔ¼öÀÇ È£Ãâ°á°ú·Î COM°´Ã¼°¡ ¾î¶² »óÅ·Π³õ¿©Áö´ÂÁö¸¦ ¸íÈ®È÷ Á¤ÀÇÇØ¾ß ÇÑ´Ù.
- ÀçÁøÀÔ(reentrancy)¿¡ °üÇÑ Çã¿ë¿©ºÎ¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù. ÀçÁøÀÔÀ̶õ ¸ÖƼ-¾²·¹µùȯ°æ¿¡¼ ÇÔ¼öÀÇ È£ÃâÀÌ ¿Ï·áµÇ±â Àü¿¡ ´Ù¸¥ ¾²·¹µå¿¡¼ ±× ÇÔ¼öÀÇ ½ÇÇà¿¡ µé¾î°¡´Â °æ¿ì¸¦ ÀǹÌÇÑ´Ù. ÀϹÝÀûÀ¸·Î ·ÎÄà ¸®¼Ò½º¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â ÀçÁøÀÔ °¡´ÉÇÏÁö¸¸, ±Û·Î¹ú ¸®¼Ò½º¸¦ »ç¿ëÇÏ´Â °æ¿ì ÀçÁøÀÔÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù.
- ÇÔ¼ö°¡ ¹Ýµå½Ã ±¸ÇöµÇ¾î¾ß ÇÏ´Â °¡µµ ¸í½ÃÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ±¸ÇöÇÏ´Â ÃøÀº 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¿¡ ÇØ´çÇÏ´Â ½ºÆ®¸µÀ» ¸®ÅÏÇÏ¸é µÈ´Ù.
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]Æ÷ÀÎÅ͸¦ »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ ÁÁ´Ù.
¸¶Ä¡¸é¼
»õ·Î¿î ¼ºñ½º¸¦ À§Çؼ Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â °æ¿ì´Â Á¾Á¾ ÀÖ´Ù. À̶§ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀÌ ÆíÀǸ¸À» µûÁ®¼ ½±°Ô ½±°Ô ÀÎÅÍÆäÀ̽º¸¦ µðÀÚÀÎÇÏ´Â °ÍÀ» ¸¹ÀÌ º¸¾Æ¿Ô´Ù. ±×·¯³ª °á±¹¿¡´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÚ²Ù ¼Õº¸°Ô µÇ°í, ±×·¯´Ù º¸´Ï Ŭ¶óÀÌ¾ðÆ® ÄÚµùµµ ÀÚ²Ù °íÃÄ¾ß Çϰí, ÀÌ·¯´Ù°¡ ¹ö±×¿¡ ÈÖ¸»·Á Çì¾î³ªÁö ¸øÇÏ´Â °æ¿ì°¡ Çã´ÙÇÏ´Ù.
µÇµµ·ÏÀ̸é Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °ÍÀ» ±ÇÇÏ°í ½Í´Ù. ±×·¯³ª Ä¿½ºÅÒ ÀÎÅÍÆäÀ̽º°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù¸é ÀÎÅÍÆäÀ̽º µðÀÚÀο¡ ¸¹Àº ½Ã°£À» ÅõÀÚÇ϶ó°í ±ÇÇÏ°í ½Í´Ù.
Âü°íÀÚ·á
- Designing COM Interface -- Charlie Kindel - MSDN Technical Articles
- Interface and Component Design with COM - Mary Kirtland - http://www.microsoft.com/com/slides/comdsgn.zip
- Inside COM ? Dale Rogerson - Microsoft Press
- Inside ATL/COM Programming with Visual C++ -- Àüº´¼± - »ï¾çÃâÆÇ»ç