ʹѺʹع IDispEventImpl

¤Ø³ÊÒÁÒöãªéáÁèẺ¤ÅÒIDispEventImplà¾×èÍʹѺʹع¡ÒÃàª×èÍÁµèͨشã¹Çѵ¶Ø¢Í§¤Ø³ ATL COM ¨Ø´àª×èÍÁµèÍãËéÇѵ¶Ø COM ¢Í§¤Ø³à¾×èͨѴ¡ÒáѺà˵ءÒóì·Õè fired ¨Ò¡Çѵ¶Ø COM ÀÒ¹͡ ¨Ø´àª×èÍÁµèÍàËÅèÒ¹Õé¨Ð¶Ù¡áÁ»¡Ñºà˵ءÒóìÍèÒ§¨áÁ» â´ÂÇѵ¶Ø COM ¢Í§¤Ø³?

¶Ù¡µéͧãªé¨Ø´àª×èÍÁµèÍËÃ×ͨشÊÓËÃѺÇѵ¶Ø COM ¢Ñ鹵͹µèÍ仹Õéµéͧ´Óà¹Ô¹:

ã¹¢Ñ鹵͹¹Õé ¤Ø³¨ÐÊÒÁÒöá¡éä¢à©¾ÒÐÊèǹËÑǢͧá¿éÁ (.h) ¢Í§¤ÅÒÊ COM ¢Í§¤Ø³?

¡ÒùÓà¢éÒã¹äźÃÒÃÕª¹Ô´

ÊÓËÃѺáµèÅÐÇѵ¶ØÀÒ¹͡«Öè§à˵ءÒóì·Õè¤Ø³µéͧ¡ÒèѴ¡Òà ¤Ø³µéͧ¹Óà¢éÒã¹äźÃÒÃÕª¹Ô´ ¢Ñ鹵͹¹Õé¡Ó˹´à˵ءÒóì·ÕèÊÒÁÒö¨Ñ´¡ÒÃä´é áÅÐáÊ´§¢éÍÁÙÅ·Õè¶Ù¡ãªéàÁ×èÍÁÕ¡ÒûÃСÒÈá¼¹¼Ñ§ÍèÒ§à˵ءÒÃ³ì ¤Ø³ÊÒÁÒöãªé¤ÓÊÑè§#importà¾×èÍ·ÕèÊÒÁÒö´Óà¹Ô¹¡ÒùÕé à¾ÔèÁºÃ÷Ѵàá·Õ¿#import·Õè¨Óà»ç¹ÊÓËÃѺáµèÅÐÍÔ¹à·ÍÃìà¿«ÊÃØ»¢éÍÁÙŤس¨ÐʹѺʹعá¿éÁËÑÇ (.h) ¢Í§¤ÅÒÊ COM ¢Í§¤Ø³?

µÑÇÍÂèÒ§µèÍ仹Óà¢éÒã¹äźÃÒÃÕª¹Ô´¢Í§à«ÔÃì¿àÇÍÃì COM ÀÒ¹͡ ( MyServer ):

 #import "D:\MyServer.dll" raw_interfaces_only, no_namespace, named_guids

ËÁÒÂà˵Ønbsp  ¤Ø³µéͧÁÕ¤ÓÊÑè§#import·ÕèᡵèÒ§ËÒ¡ÊÓËÃѺáµèÅÐÍÔ¹à·ÍÃìà¿«¡ÒÃÊÃØ»¢éÍÁÙÅÀÒ¹͡¤Ø³¨ÐʹѺʹع(&N)?

»ÃСÒÈÇèÒ ÍÔ¹à·ÍÃìà¿« IDispEventImpl

ËÅѧ¨Ò¡·Õè¤Ø³ä´é¹Óà¢éÒã¹äźÃÒÃÕª¹Ô´¢Í§áµèÅÐÍÔ¹à·ÍÃìà¿«¡ÒÃÊÃØ»¢éÍÁÙÅ ¤Ø³¨Óà»ç¹µéͧ»ÃСÒÈãªéÍÔ¹à·ÍÃìà¿«IDispEventImplᡵèÒ§ËÒ¡ÊÓËÃѺáµèÅÐÍÔ¹à·ÍÃìà¿«¡ÒÃÊÃØ»¢éÍÁÙÅÀÒ¹͡ »ÃѺà»ÅÕ蹡ÒûÃСÒȢͧ¤ÅÒÊ COM ¢Í§¤Ø³ â´Â¡ÒÃà¾ÔèÁ¡ÒûÃСÒÈÍÔ¹à·ÍÃìà¿«ÊÓËÃѺIDispEventImplÊÓËÃѺáµèÅÐÇѵ¶ØÀÒ¹͡ ÊÓËÃѺ¢éÍÁÙÅà¾ÔèÁàµÔÁà¡ÕèÂǡѺ¾ÒÃÒÁÔàµÍÃì ´ÙIDispEventImpl?

ºÃ÷Ѵ¢Í§ÃËÑʵèÍ仹Õé»ÃСÒÈÊͧ¨Ø´àª×èÍÁµèÍ ÊÓËÃѺ¡ÒáÓ˹´àͧ IExtEvents1 áÅÐ IExtEvents2 ÍÔ¹à·ÍÃìà¿« ÊÓËÃѺ¡ÒÃãªé§Ò¹ â´Â¤ÅÒÊÇѵ¶Ø COMCMyObj:

iDispEventImpllt; 0, CMyObj áÅÐ DIID__IExtEvents1 ÊÒ¸ÒóÐ
    & LIBID_EXTEVENTS1Lib, 1, 0 >
ÊÒ¸ÒóРIDispEventImpl < 1, CMyObj áÅÐ DIID__IExtEvents2
    & LIBID_EXTEVENTS2Lib, 1, 0 & gt

»ÃСÒÈ¡ÒÃáÁ»ÍèÒ§¢Í§à˵ءÒóì

¡Ãкǹ¡ÒÃà¾×èÍãËé¡ÒÃá¨é§àµ×͹à˵ءÒóì·Õè¨Ð¨Ñ´¡Òà â´Â¿Ñ§¡ìªÑ¹·ÕèàËÁÒÐÊÁ Çѵ¶Ø COM ¢Í§¤Ø³µéͧ¼ÅÔµáµèÅÐà˵ءÒóì¢Í§µÑǨѴ¡Ò÷Õè¶Ù¡µéͧ ¹Õé¨Ð¡ÃÐ·Ó â´Â¡ÒûÃСÒÈÇèÒ á¼¹·ÕèÍèÒ§¢Í§à˵ءÒóì?

ATL áÊ´§ËÅÒÂáÁâ¤ÃBEGIN_SINK_MAP, END_SINK_MAPáÅÐSINK_ENTRY·Õè·Ó¡ÒÃáÁ»¹Õé§èÒ¢Öé¹ ÃٻẺÁҵðҹ¨Ðà»ç¹´Ñ§¹Õé:

BEGIN_SINK_MAP(comClass)
 nbsp SINK_ENTRY (ÃËÑÊ dispid, func)
...ÃÒ¡ÒÃà˵ءÒóìÀÒ¹͡ //additional
END_SINK_MAP()(&N)

µÑÇÍÂèÒ§µèÍ仹Õé»ÃСÒÈ¡ÒÃáÁ»ÍèÒ§à˵ءÒÃ³ì ´éǵÑǨѴ¡ÒÃà˵ءÒóì·ÕèÊͧ:

BEGIN_SINK_MAP(CMyObj)
   SINK_ENTRY (0, Events1, OnClick1)
   SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()

à¡×ͺÊÁºÙóìãªé§Ò¹ä´é ¢Ñé¹µÍ¹ÊØ´·éÒÂà¡ÕèÂÇ¢éͧ advising áÅÐ unadvising ¢Í§ÍÔ¹à·ÍÃìà¿«ÀÒ¹͡?

Advising áÅÐÍÔ¹à·ÍÃìà¿« IDispEventImpl Unadvising

¢Ñé¹µÍ¹ÊØ´·éÒ¤×Í¡Òà ãªéÇÔ¸Õ¡Ò÷Õè¨Ðá¹Ð¹ÓãËé (ËÃ×Í unadvise) ¨Ø´àª×èÍÁµèÍ·Ñé§ËÁ´ 㹪èǧàÇÅÒàËÁÒÐÊÁ Advising ¹Õéµéͧ·Ó¡è͹¡ÒÃÊ×èÍÊÒÃÃÐËÇèÒ§ÅÙ¡¤éÒÀÒ¹͡áÅÐÇѵ¶Ø¢Í§¤Ø³ÊÒÁÒöãªéʶҹ·Õè ¡è͹Çѵ¶Ø¢Í§¤Ø³¡ÅÒÂà»ç¹ÁͧàËç¹ áµèÅÐÍÔ¹à·ÍÃìà¿«ÀÒ¹͡ÊÃØ»¢éÍÁÙÅä´éÃѺ¡ÒÃʹѺʹع â´ÂÇѵ¶Ø¢Í§¤Ø³¨Ð¶Ù¡Êͺ¶ÒÁÊÓËÃѺÍÔ¹à·ÍÃìà¿«¡ÒÃÊè§ÍÍ¡ àª×èÍÁµèÍ áÅСÒÃÍéÒ§ÍÔ§ÍÔ¹à·ÍÃìà¿«ÊÓËÃѺ¡ÒÃÍÍ¡ãªé㹡ÒèѴ¡ÒÃà˵ءÒóì¨Ò¡µÑǤǺ¤ØÁ ¡Ãкǹ¡ÒùÕé¨ÐàÃÕ¡ÇèÒ "advising

ËÅѧ¨Ò¡Çѵ¶Ø¢Í§¤Ø³¨ÐàÊÃç¨ÊÔé¹ ´éÇÂÍÔ¹à·ÍÃìà¿«ÀÒ¹͡ ÍÔ¹à·ÍÃìà¿«¢ÒÍÍ¡¤ÇÃä´éÃѺá¨é§ÇèÒ ¾Ç¡à¢ÒäÁèãªé â´ÂÇѵ¶Ø COM ¡Ãкǹ¡ÒùÕé¨ÐàÃÕ¡ÇèÒ "unadvising

ᵡµèÒ§¡Ñ¹à¹×èͧ¨Ò¡¢Í§ÅѡɳÐ੾ÒТͧÇѵ¶Ø COM ¢Ñ鹵͹¹Õéä» ã¹ÃÒÂÅÐàÍÕ´áÅдÓà¹Ô¹ ÃÐËÇèÒ§¡ÒÃãªé§Ò¹ ÃÒÂÅÐàÍÕ´àËÅèÒ¹ÕéÍÂÙè¹Í¡à˹×͢ͺࢵ¢Í§ËÑÇ¢é͹Õé áÅÐäÁèä´é?

Index