使用.NET 应用程序的Classic COM 组件
下面是最重要的代码行:
m_pager.OnAirlineArrivedEvent += new如果了解委托工作的语法就能完全能理解这里正在进行什么。你现在所作的就是增添IAirlineArrivalPagerEvents_OnAirlineArrivedEventEventHandler委托实例,此IAirlineArrivalPagerEvents_OnAirlineArrivedEventEventHandler委托实例将OnMyPagerNotify方法引用到OnAirlineArrivedEvent 事件表。通常事件OnAirlineArrivedEvent的名称和输出接口里的方法名称是一样的。委托名称(_IAirlineArrivalPagerEvents_OnAirlineArrivedEventEventHandler)通常遵循InterfaceName_EventNameEventHandler模式。这里所完成的就是从COM组件接受事件通知。你必须要做的就是创建组件实例,然后添加一个委托,把处理程序函数引用到事件表中。你在这里所做的与COM世界里IConnectionPoint::Advise所做的相类似。无论什么时候,当COM组件引起OnAirlineArrivedEvent事件,将会调用OnMyPagerNotify方法来处理事件通知。在.NET中,用线路连接处理程序接受,从引起事件的COM对象中接受事件通知非常简单。
_IAirlineArrivalPagerEvents_OnAirlineArrivedEventEventHandler(
OnMyPagerNotify);

Classic COM 中的连接点事件处理机制是怎样映射到.NET中的委托事件处理机制。当不想再接受通知时可以通过调用从事件表中将委托移出来。
m_pager.OnAirlineArrivedEvent -= new这个与IConnectionPoint::Unadvise方法调用相似。在Advise 调用中接受到的cookie,将接受对象接口指针从机器中移出来,IConnectionPoint::Unadvise方法调用就能撤回进一步的通知。但是,Classic COM中的连接点事件处理模式和.NET中的委托事件模式之间的映射由谁来处理?由类型库导入程序(TLBIMP)生成的元数据代理包含类型,这些元数据代理包含类型执行适配器的工作,通过运行库可调用的包装存根(在运行时创建的),把非托管世界里的连接点事件处理模式和.NET世界里的基于委托事件模式用线路连接起来。如果对简单外表下面发生的事情很感兴趣,我期望你使用IL拆装器(ILDASM)来打开元数据代理(AirlineNotifyMetadata.dll),在帮助程序类型中为不同的方法检查MSIL代码。
_IAirlineArrivalPagerEvents_OnAirlineArrivedEventEventHandler(OnMyPagerNotify);
0
相关文章