OLE IDispatch ÀÎÅÍÆäÀ̽º °³¿ä
IDispatch ÀÎÅÍÆäÀ̽º¸¦ ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ ±â´É »ç¿ë µÇ´Â ÀÀ¿ë ÇÁ·Î±×·¥ ³ëÃâ ¸Þ¼µå¿Í °°Àº ¼Ó¼º¿¡ ÀÇÇØ ´Ù¸¥ ¾ð¾î ¶Ç´Â Visual BASIC°ú °°Àº ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ½À´Ï´Ù ¼ö´Ü ÀÌ´Ù. ÀÌ ÀÎÅÍÆäÀ̽ºÀÇ °¡Àå Áß¿ä ÇÑ ºÎºÐÀº IDispatch::Invoke ÇÔ¼öÀÔ´Ï´Ù. MFC »ç¿ë "µð½ºÆÐÄ¡ ¸Ê" IDispatch::Invoke¸¦ ±¸Çö ÇÕ´Ï´Ù. µð½ºÆÐÄ¡ ¸Ê ·¹À̾ƿô ¶Ç´Â "¸ð¾ç" CCmdTargetÀÇ MFC ±¸Çö Á¤º¸¸¦ Á¦°ø-Á÷Á¢ °³Ã¼ÀÇ ¼Ó¼ºÀ» Á¶ÀÛ Çϰųª ¸â¹ö IDispatch::Invoke ¿äûÀ» ¸¸Á· ½Ã۱â À§ÇØ °³Ã¼ ³»¿¡¼ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï ÆÄ»ý Ŭ·¡½º,¡£
´ëºÎºÐÀÇ °æ¿ì, ClassWizard ¹× MFC OLE ÀÚµ¿È ÀÀ¿ë ÇÁ·Î±×·¥ ÇÁ·Î±×·¡¸Ó¿¡¼ ³»¿ëÀÇ ´ëºÎºÐÀ» ¼û±æ ÇùÁ¶. ÇÁ·Î±×·¡¸Ó´Â ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ ³ëÃâ ÇÏ´Â ½ÇÁ¦ ±â´É¿¡ ÁýÁß ÇÏ °í ±âº» ¹è°ü¿¡ ´ëÇØ °ÆÁ¤ÇÒ ÇÊ¿ä ÇÏÁö ¾Ê½À´Ï´Ù.
±×·¯³ª °æ¿ì,, MFC Àå¸é µÚ¿¡ ¹«¾ùÀ» ÇÏ °í ÀÌÇØ ÇØ¾ß ÇÏ´Â °æ¿ì ÀÌ ³ëÆ®´Â ÇÁ·¹ÀÓ ¿öÅ©¿¡¼ DISPIDÀǸâ¹ö ÇÔ¼ö ¹× ¼Ó¼º¿¡ ÇÒ´ç ÇÏ´Â ¹æ¹ýÀ» ÁÖ¼Ò °Í ÀÌ´Ù. MFC¸¦ »ç¿ë ÇÏ ¿© s DISPID¸¦ ÇÒ´ç ÇÏ´Â °Í¿¡ ´ë ÇÑ ¾Ë°í¸®ÁòÀÇ Áö½ÄÀº ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ °³Ã¼¿¡ ´ë ÇÑ "Çü½Ä ¶óÀ̺귯¸®"¸¦ ¸¸µé ¶§¿Í °°Àº Id¸¦ ¾Ë¾Æ¾ß ÇÒ °æ¿ì¿¡ Çʿ䡣
MFC DISPID ÇÒ´ç
ÀÚµ¿È ¼Ó¼º ¹× ±×µéÀÇ ÄÚµå (¿¹: obj. ¸Þ¼µå »ç¿ë ÀÚµ¿È (Visual Basic »ç¿ëÀÚ, ¿¹¸¦ µé¾î), ÃÖÁ¾ »ç¿ëÀÚÀÇ ½ÇÁ¦ À̸§À» º¸°í ºñ·ÏShowWindow), IDispatch::Invoke ÀÇ ±¸ÇöÀ» ½ÇÁ¦ À̸§À» ¼ö½Å ÇÏÁö ¾Ê½À´Ï´Ù. ÃÖÀûÈÀÇ ÀÌÀ¯·Î ¹ÞÀ¸¸é´Â DISPID, 32-ºñÆ® "¸¶¹ýÀÇ ÄíŰ" ¸Þ¼µå ¶Ç´Â ¼Ó¼º¿¡ ¾×¼¼½ºÇÒ ¼ö ÀÖ´Â ¼³¸íÀÔ´Ï´Ù. ÀÌ·¯ÇÑ DISPID °ªÀº IDispatch::GetIDsOfNames¶ó°í ÇÏ´Â ´Ù¸¥ ¸Þ¼µå¸¦ ÅëÇØ IDispatch ±¸Çö¿¡¼ ¹Ýȯ µË´Ï´Ù. ÀÚµ¿È Ŭ¶óÀÌ¾ðÆ® ÀÀ¿ë ÇÁ·Î±×·¥ °¢ ¸â¹ö ¶Ç´Â ¼Ó¼º¿¡ ¾×¼¼½º ÇÏ·Á¸é, Àǵµ ´ë ÇÑ À̸§ µÎ ¹ø È£Ãâ ÇÏ °í IDispatch::Invoke¿¡ ´ë ÇÑ ÀÌÈÄ È£ÃâÀ» À§ÇØ ±×µéÀ» ij½Ã ÇÕ´Ï´Ù. ÀÌ ÀÌ·¸°Ô ºñ½Ñ ¹®ÀÚ¿ Á¶È¸¸¸ ÀÌ·ç¾îÁý´Ï´Ù Çѹø IDispatch::Invoke ÅëÈ ´ç ÇÑ ¹ø ´ë½Å °³Ã¼ »ç¿ë¡£
MFC´Â °¢ ¸Þ¼µå ¹× ¼Ó¼ºÀ» ±â¹ÝÀ¸·Î µÎ °¡Áö¿¡ ´ë ÇÑ DISPIDs¸¦ °áÁ¤:
DISPID ´Â µÎ ºÎºÐÀ¸·Î ³ª´¹´Ï´Ù. DISPID LOWORD µð½ºÆÐÄ¡ ¸Ê À§¿¡ °Å¸®°¡ ù ¹øÂ° ±¸¼º ¿ä¼Ò¸¦ Æ÷ÇÔÇÕ´Ï´Ù. HIWORD °Å¸®°¡ °¡Àå ¸¹ÀÌ ÆÄ»ý µÈ Ŭ·¡½º¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ¿¹¸¦ µé¾î:
cDispPoint Ŭ·¡½º: °ø¿ë CCmdTarget
{
°ø°³:
nbsp;? ªÀº m_x, m_y;
?? ...
?? DECLARE_DISPATCH_MAP()
?? ...
};
CDisp3DPoint Ŭ·¡½º: °ø¿ë CDispPoint
{
°ø°³:
?? ªÀº m_y;
?? ...
?? DECLARE_DISPATCH_MAP()
?? ...
};
BEGIN_DISPATCH_MAP (CDispPoint, CCmdTarget)
?? DISP_PROPERTY (CDispPoint, "x", m_x VT_I2)
?? DISP_PROPERTY (CDispPoint, "y", m_y, VT_I2)
END_DISPATCH_MAP()
BEGIN_DISPATCH_MAP (CDisp3DPoint, CDispPoint)
?? DISP_PROPERTY (CDisp3DPoint, "z", m_z, VT_I2)
END_DISPATCH_MAP()(&N)
º¸½Ã ´Ù½Ã ÇÇ, °Å±â¿¡ OLE ÀÚµ¿È ÀÎÅÍÆäÀ̽º¸¦ ³ëÃâ ÇÏ´Â µÎ °³ÀÇ Å¬·¡½º. ÀÌ·¯ÇÑ Å¬·¡½º Áß Çϳª¿¡¼ ´Ù¸¥ ÆÄ»ý ¹× µû¶ó¼ OLE ÀÚµ¿È ºÎǰÀ» Æ÷ÇÔ ÇÏ ¿© ±âº» Ŭ·¡½ºÀÇ ±â´ÉÀ» Ȱ¿ë ("x" ¹× "y"ÀÌÀÌ °æ¿ì¿¡´Â ¼Ó¼º)¡£
MFC Ŭ·¡½º Cdisppoint¿¡ ´ë ÇÑ DISPIDs¸¦ °°ÀÌ »ý¼º:
¼Ó¼º Xnbsp;?? (DISPID) 0X00000001
Y ¼Ó¼º (DISPID) 0x00000002(&N)
¼Ó¼ºÀÌ ±âº» Ŭ·¡½º, ÀÌÈÄ DISPID HIWORD ´Â Ç×»ó 0 (Cdisppoint¿¡ ´ë ÇÑ °¡Àå ¸¹ÀÌ ÆÄ»ý µÈ Ŭ·¡½º¿¡¼ °Å¸®´Â 0)¡£
MFC Ŭ·¡½º Cdisp3dpoint¿¡ ´ë ÇÑ DISPIDs¸¦ °°ÀÌ »ý¼º:
¼Ó¼º Znbsp;?? (DISPID) 0X00000001
¼Ó¼º (DISPID) 0x00010001 X
Y ¼Ó¼º (DISPID) 0x00010002(&N)
Z ¼Ó¼ºÀº CDisp3DPoint ¼Ó¼ºÀ» ³ëÃâ Çϴ Ŭ·¡½º¿¡ Á¤ÀÇ µÈ ÀÌÈÄ HIWORD Á¦·Î ÇÔ²² DISPID ÁÖ¾î Áý´Ï´Ù. X ¹× Y ¼Ó¼ºÀº ±âº» Ŭ·¡½º¿¡ Á¤ÀÇ µÈ DISPID HIWORD À̹ǷΠ1, °¡Àå ¸¹ÀÌ ÆÄ»ý µÈ Ŭ·¡½º¿¡¼ ÇÑ ÆÄ»ýÀÇ °Å¸®¿¡¼ ÀÌ·¯ÇÑ ¼Ó¼ºÀÌ Á¤ÀÇ µÈ Ŭ·¡½º À̹ǷΡ£
¸Þ¸ðnbsp;??°Å±â¿¡ ¸í½ÃÀû DISPID ¸¦ °¡Áø Áöµµ Ç׸ñ¿¡ Á¸Àç ÇÏ´Â °æ¿ì¿¡ LOWORD Àº Ç×»ó Áöµµ¿¡¼ À§Ä¡¿¡ µû¶ó °áÁ¤ µË´Ï´Ù ( DISP_PROPERTY ¹× DISP_FUNCTION ¸ÅÅ©·ÎÀÇ _ID ¹öÀü¿¡ ´ë ÇÑ ³»¿ëÀº ´ÙÀ½ ¼½¼Ç ÂüÁ¶)(&N)¡£
MFC µð½ºÆÐÄ¡ ¸Ê ±â´É °í±Þ
À̹ø ¹öÀüÀÇ Visual c + + Ŭ·¡½º ¸¶¹ý»ç¿¡¼ Áö¿ø ÇÏÁö ¾Ê´Â Ãß°¡ ±â´ÉÀÇ ¿©·¯ °¡Áö°¡ ÀÖ½À´Ï´Ù. Classwizard´Â DISP_FUNCTION, DISP_PROPERTY¹× DISP_PROPERTY_EX ¸Þ¼µå¿Í ¸â¹ö º¯¼ö ¼Ó¼º get/set ¸â¹ö ÇÔ¼ö ¼Ó¼ºÀ» °¢°¢ Á¤ÀÇ ÇÏ´Â Áö¿ø ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ´É·ÂÀº ÀϹÝÀûÀ¸·Î ´ëºÎºÐÀÇ ÀÚµ¿È ¼¹ö¸¦ ¸¸µå´Â µ¥ ÇÊ¿äÇÑ ¸ðµç¡£
ClassWizard Áö¿ø ¸ÅÅ©·Î ÀûÀý ÇÑ ¶§¿¡ ´ÙÀ½ Ãß°¡ ¸ÅÅ©·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù: DISP_PROPERTY_NOTIFY¹× DISP_PROPERTY_PARAM¡£
DISP_PROPERTY_NOTIFY-¸ÅÅ©·Î ¼³¸í
DISP_PROPERTY_NOTIFY (Ŭ·¡½º, pszName, ȸ¿ø¸í, pfnAfterSet, vtPropType)
Ŭ·¡½º
Ŭ·¡½ºÀÇ À̸§¡£
pszName
¼Ó¼ºÀÇ ¿ÜºÎ À̸§¡£
ȸ¿ø¸í
¼Ó¼ºÀÌ ÀúÀå ÇÏ´Â ¸â¹ö º¯¼öÀÇ À̸§¡£
pfnAfterSet
¼Ó¼ºÀÌ º¯°æ µÉ ¶§ È£ÃâÇÒ ¸â¹ö ÇÔ¼ö À̸§¡£
vtPropType
¼Ó¼ºÀÇ À¯ÇüÀ» ÁöÁ¤ ÇÏ´Â °ª¡£
¸Þ¸ðnbsp;??ÀÌ ¸ÅÅ©·Î DISP_PROPERTY, ó·³ Á¦¿Ü Ãß°¡ Àμö¸¦ ¼ö¶ô ÇÕ´Ï´Ù. Ãß°¡ Àμö pfnAfterSet, nothingÀ» ¹Ýȯ ÇÏ °í ¸Å°³ º¯¼ö¸¦ 'void OnPropertyNotify()' ¸â¹ö ÇÔ¼ö À̾î¾ß ÇÕ´Ï´Ù. ÈÄ ¸â¹ö º¯¼ö ¼öÁ¤ µÇ¾ú½À´Ï´Ù ¶ó´Â °ÍÀÔ´Ï´Ù(&N).
DISP_PROPERTY_PARAM-¸ÅÅ©·Î ¼³¸í
DISP_PROPERTY_PARAM (Ŭ·¡½º, pszName, pfnGet, pfnSet, vtPropType, vtsParams)
Ŭ·¡½º
Ŭ·¡½ºÀÇ À̸§¡£
pszName
¼Ó¼ºÀÇ ¿ÜºÎ À̸§¡£
memberGet
¼Ó¼ºÀ» °¡Á®¿À´Â µ¥ »ç¿ë ÇÏ´Â ¸â¹ö ÇÔ¼öÀÇ À̸§¡£
memberSet
¼Ó¼ºÀ» ¼³Á¤ ÇÏ´Â µ¥ »ç¿ë ÇÏ´Â ¸â¹ö ÇÔ¼öÀÇ À̸§¡£
vtPropType
¼Ó¼ºÀÇ À¯ÇüÀ» ÁöÁ¤ ÇÏ´Â °ª¡£
vtsParams
°¢ ¸Å°³ º¯¼ö¿¡ ´ë ÇÑ VTS_¸¦ ±¸ºÐ ÇÏ´Â ¹®ÀÚ¿ °ø°£¡£
¸Þ¸ðnbsp;DISP_PROPERTY_EX ¸ÅÅ©·Î ó·³ÀÌ ¸ÅÅ©·Î º°µµ Get ¹× Set ¸â¹ö ÇÔ¼ö¸¦ »ç¿ë ÇÏ ¿© ¾×¼¼½º ÇÏ´Â ¼Ó¼ºÀ» Á¤ÀÇ ÇÕ´Ï´Ù. ±×·¯³ª,ÀÌ ¸ÅÅ©·Î »ç¿ë ÇÏ¸é ¼Ó¼º¿¡ ´ë ÇÑ ¸Å°³ º¯¼ö ¸ñ·ÏÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ¹æ¹ýÀ¸·Î Àε¦½ÌµÈ ¶Ç´Â ¸Å°³ º¯¼ö°¡ ÀÖ´Â ¼Ó¼ºÀ» ±¸Çö ÇÏ´Â °æ¿ì À¯¿ë ÇÕ´Ï´Ù. ¸Å°³ º¯¼ö¸¦ Ç×»ó ¹èÄ¡ µË´Ï´Ù ¸ÕÀú µÚ¿¡ ¼Ó¼ºÀÇ »õ °ª. ¿¹¸¦ µé¾î(&N):
DISP_PROPERTY_PARAM (CMyObject, "item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2)
get ¹× set ¸â¹ö ÇÔ¼ö¿¡ ÇØ´ç ÇÏ´Â:
LPDISPATCH CMyObject::GetItem(short row, short col)
void CMyObject::SetItem (ªÀº Çà, ªÀº ´ëÀå±Õ, LPDISPATCH newValue)
DISP_XXXX_ID-¸ÅÅ©·Î ¼³¸í
DISP_FUNCTION_ID (Ŭ·¡½º, pszName, dispid, pfnMember, vtRetVal, vtsParams)
DISP_PROPERTY_ID (Ŭ·¡½º, pszName, dispid, ȸ¿ø¸í, vtPropType)
DISP_PROPERTY_NOTIFY_ID (Ŭ·¡½º, pszName, dispid, ȸ¿ø¸í, pfnAfterSet, vtPropType)
DISP_PROPERTY_EX_ID (Ŭ·¡½º, pszName, dispid, pfnGet, pfnSet, vtPropType)
DISP_PROPERTY_PARAM_ID (Ŭ·¡½º, pszName, dispid, pfnGet, pfnSet, vtPropType, vtsParams)
Ŭ·¡½º
Ŭ·¡½ºÀÇ À̸§¡£
pszName
¼Ó¼ºÀÇ ¿ÜºÎ À̸§¡£
dispid
¼Ó¼º ¶Ç´Â ¸Þ¼µå¿¡ ´ë ÇÑ °íÁ¤ µÈ DISPID¡£
pfnGet
¼Ó¼ºÀ» °¡Á®¿À´Â µ¥ »ç¿ë ÇÏ´Â ¸â¹ö ÇÔ¼öÀÇ À̸§¡£
pfnSet
¼Ó¼ºÀ» ¼³Á¤ ÇÏ´Â µ¥ »ç¿ë ÇÏ´Â ¸â¹ö ÇÔ¼öÀÇ À̸§¡£
ȸ¿ø¸í
¼Ó¼ºÀ» ¸ÅÇÎÇÒ ¸â¹ö º¯¼ö À̸§
vtPropType
¼Ó¼ºÀÇ À¯ÇüÀ» ÁöÁ¤ ÇÏ´Â °ª¡£
vtsParams
°¢ ¸Å°³ º¯¼ö¿¡ ´ë ÇÑ VTS_¸¦ ±¸ºÐ ÇÏ´Â ¹®ÀÚ¿ °ø°£¡£
¸Þ¸ðnbsp;??ÀÌ ¸ÅÅ©·Î »ç¿ë Çϸé MFC Çϳª¿¡ ÀÚµ¿À¸·Î ÇÒ´ç µÇ´Â ´ë½Å DISPID ¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °í±Þ ¸ÅÅ©·Î µ¿ÀÏÇÑ À̸§ÀÌ Á¦¿Ü ÇÏ °í´Â ID ¸ÅÅ©·Î À̸§ (¿¹: DISP_PROPERTY_ID)¿¡ Ãß°¡ ID¸¦ pszName ¸Å°³ º¯¼ö¿¡ ¹Ù·Î µÚ¿¡ ÁöÁ¤ µÈ ¸Å°³ º¯¼ö¿¡ ÀÇÇØ °áÁ¤ µË´Ï´Ù. AFXDISP¸¦ ÂüÁ¶ ÇϽʽÿÀ.ÀÌ·¯ÇÑ ¸ÅÅ©·Î ´ë ÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº HÀÔ´Ï´Ù. _ID Ç׸ñ µð½ºÆÐÄ¡ ¸Ê ³¡¿¡ ¹èÄ¡ ÇØ¾ß ÇÕ´Ï´Ù. ±×µéÀº ºñ¿Í °°Àº ¹æ½Ä¿¡¼ ÀÚµ¿ DISPID »ý¼ºÀ» ¿µÇâÀ» ¹ÌÄ¥ °ÍÀÔ´Ï´Ù-_ID ¹öÀü ¸ÅÅ©·ÎÀÇ °Í ( DISPIDÀÇÀ§Ä¡¿¡ ÀÇÇØ °áÁ¤ µË´Ï´Ù). ¿¹¸¦ µé¾î(&N)
BEGIN_DISPATCH_MAP (CDisp3DPoint, CCmdTarget)
nbsp;? DISP_PROPERTY (CDisp3DPoint, "y", m_y, VT_I2)
?? DISP_PROPERTY (CDisp3DPoint, "z", m_z, VT_I2)
?? DISP_PROPERTY_ID (CDisp3DPoint, "x", 0x00020003, m_x VT_I2)
END_DISPATCH_MAP()(&N)
MFC Ŭ·¡½º Cdisp3dpoint¿¡ ´ë ÇÑ Dispid¸¦ °°ÀÌ »ý¼º µË´Ï´Ù.:
¼Ó¼º Xnbsp;?? (DISPID) 0X00020003
Y ¼Ó¼º (DISPID) 0x00000002
Z ¼Ó¼º (DISPID) 0x00000001(&N)
ÀÌÀü ¹öÀü°ú ȣȯ¼º ÀÌÀü¿¡ ±âÁ¸ µð½ºÆÐÄ¡ ÀÎÅÍÆäÀ̽º ¶Ç´Â ƯÁ¤ ½Ã½ºÅÛÀ» ±¸Çö ÇÏ´Â ¸Þ¼µå ¶Ç´Â ¼Ó¼º (ÀϹÝÀûÀ¸·Î´Â ºÎÁ¤ÀûÀÎ DISPID, DISPID_NEWENUM Ä÷º¼Ç µîÀ¸·Î Ç¥½Ã) Á¤ÀÇ À¯Áö ÇÏ´Â µ¥ À¯¿ë °íÁ¤µÈ DISPID ¸¦ ÁöÁ¤¡£
Coleclientitem¿¡ ´ë ÇÑ IDispatch ÀÎÅÍÆäÀ̽º¸¦ °¡Á®¿À´Â Áß
´ëºÎºÐÀÇ ¼¹ö´Â ÀÚ½ÅÀÇ ¹®¼ °³Ã¼ ÇÔ²² OLE ¼¹ö ±â´É ³»¿¡¼ ÀÚµ¿È¸¦ Áö¿ø ÇÕ´Ï´Ù. Çϱâ À§Çؼ´ÂÀÌ ÀÚµ¿È ÀÎÅÍÆäÀ̽º¿¡ ´ë ÇÑ ¾×¼¼½º¸¦ ¾ò±â À§ÇØ Á÷Á¢ COleClientItem::m_lpObject ¸â¹ö º¯¼ö¸¦ ¾×¼¼½º ÇÏ´Â µ¥ ÇÊ¿äÇÑÀÔ´Ï´Ù. ¾Æ·¡ ÄÚµå´Â COleClientItem¿¡¼ ÆÄ»ý µÈ °³Ã¼¿¡ ´ë ÇÑ IDispatch ÀÎÅÍÆäÀ̽º¸¦ °Ë»ö ÇÕ´Ï´Ù. °æ¿ìÀÌ ±â´ÉÀÌ ÇÊ¿äÇÑ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ ¾Æ·¡ÀÇ Äڵ带 Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
LPDISPATCH CMyClientItem::GetIDispatch()
{
nbsp;? ASSERT_VALID(this);
?? ASSERT (m_lpObject! = NULL);
LPUNKNOWN lpUnk = m_lpObject;
Run ();??? / / ½ÇÇà ÇØ¾ß ÇÕ´Ï´Ù
LPOLELINK lpOleLink = NULL;
?? °æ¿ì (m_lpObject-> QueryInterface (IID_IOleLink, (LPVOID ¸Ö¸® *) & lpOleLink) NOERROR =)
?? {
?????? ASSERT (lpOleLink! = NULL);
?????? lpUnk = NULL;
?????? °æ¿ì (lpOleLink-> GetBoundSource(&lpUnk)! = NOERROR)
?????? {
?????????? TRACE0 ("°æ°í: ¸µÅ©¿¡ ¿¬°á µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù! \n");
?????????? lpOleLink-> Release();
?????????? NULL; ¹Ýȯ
?????? }
?????? ASSERT (lpUnk! = NULL);
?? }
LPDISPATCH lpDispatch = NULL;
?? °æ¿ì (lpUnk-> QueryInterface (IID_IDispatch, & lpDispatch)! = NOERROR)
?? {
?????? TRACE0 ("°æ°í: Idispatch¸¦ Áö¿ø ÇÏÁö ¾Ê½À´Ï´Ù! \n");
?????? NULL; ¹Ýȯ
?? }
ASSERT (lpDispatch! = NULL);
?? ¹Ýȯ lpDispatch;
}
µð½ºÆÐÄ¡ ÀÎÅÍÆäÀ̽º¿¡¼ ¹ÝȯÀÌ ÇÔ¼ö Á÷Á¢ »ç¿ë Çϰųª Çü½ÄÀÌ ¾ÈÀüÇÑ ¾×¼¼½º¸¦ À§ÇØ COleDispatchDriver ¿¡ ¿¬°á µÈ ´ÙÀ½ ¼ö ÀÖ½À´Ï´Ù. ±×°ÍÀº ÀÛ¾÷À» Á÷Á¢ »ç¿ë ÇÏ´Â °æ¿ì ÇØ´ç ¸±¸®½º ¸â¹ö¸¦ È£Ãâ ÇÏ´Â ÀÖ´ÂÁö È®ÀÎ ÇÒ ¶§ Æ÷ÀÎÅÍ ( COleDispatchDriver ¼Ò¸êÀÚ´ÂÀÌ ±âº»ÀûÀ¸·Î)¸¦ ÅëÇØ¡£
±â¼ú ³ëÆ® ¹øÈ£·Î |nbsp; Ä«Å×°í¸®º° ±â¼ú ³ëÆ®(&N)