TN039: MFC/OLE ÀÚµ¿È­ ±¸Çö

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)

Index