首页 > 新闻系统 > 编程天地 > 文章正文

使用.NET 应用程序的Classic COM 组件

2007-11-29 11:15:21 来源:IT168.com 作者:微山 点击:
输入IAirlineArrivalPager接口的AddArrivalDetails方法的执行情况。

 
  输入IAirlineArrivalPager接口的AddArrivalDetails方法的执行情况。

....... 
STDMETHODIMP CAirlineArrivalPager::AddArrivalDetails(
BSTR bstrAirlineName,BSTR bstrArrivalTerminal)
{
Fire_OnAirlineArrivedEvent(bstrAirlineName,bstrArrivalTerminal);

// 返回状态
return S_OK;
}
.......
undefined undefined
 
 这个方法的执行情况使用了Fire_OnAirlineArrivedEvent帮助程序方法,以此来通报所有接受对象执行IAirlineArrivalPagerEvents,IAirlineArrivalPagerEvents早已预定了事件通知通知。Fire_OnAirlineArrivedEvent是一个函数代理类型方法,通过Implement Connection point wizard,自动地从IConnectionPointImpl派生而来。本质上,当IConnectionPoint::Advise被调用时,它通过映射迭代,这个映射把接口指针存储到接受对象,使用这些接口指针来调用事件通知方法(OnAirlineArrivedEvent),此事件通知方法由客户端接受对象执行。

   如果你是一个C++程序师,编译COM感知客户端应用程序来接受通知,你将在客户端应用程序中建立一个接受对象,此客户端应用程序执行IAirlineArrivalPagerEvents接口。然后创建AirlineArrivalPager对象,通过调用,将接受对象的IUnknown接口指针传递到IConnectionPoint::Advise,或者使用一个帮助程序方法,例如:AtlAdvise,把你的接受用线路连接到引起事件的对象,因此你可以接受事件通知。使用VB 6.0,就像在你的宣告中使用WithEvents和为接受通知定义处理程序一样简单。VB将处理简单外表下面所有困难的工作,把由输出接口制造的通知连接到正确的处理程序功能上。

使用委托处理事件

   如果对.NET中怎样使用委托很熟悉了,可以跨过这一章进入下一章。.NET中的事件处理基本上是建立在委托事件模式基础上的。委托与C/C++中使用的功能指针相似。基于委托的事件模式,因其使用的简单性而得到普及,正如WFC(Visual J++中的微软基础类库)时代一样。委托允许任何组件引起的事件被联系到处理程序功能或者任何其它组件的方法上,只要函数功能或者方法的函式标记式与委托的函式标记式完全匹配。下面的简单例子,可以了解委托是如何运行。

// 下面是 SayGoodMorning的委托
delegate string SayGoodMorning();

public class HelloWorld
{
public string SpeakEnglish() {
return "Good Morning";
}

public string SpeakFrench() {
return "Bonjour";
}

public static void Main(String[] args) {

HelloWorld obj = new HelloWorld();

// 将委托与方法相关联
SayGoodMorning english = new SayGoodMorning(obj.SpeakEnglish);
SayGoodMorning french = new SayGoodMorning(obj.SpeakFrench);

// 引用委托
System.Console.WriteLine(english());
System.Console.WriteLine(french());

}

}/* 结束class类 */
undefined undefined
  
这是你得到的输出情况:

Good Morning 
Bonjour
undefined undefined
   在上面的例子宣告了一个SayGoodMorning委托。然后把委托用线路连接起来,以此来引用HelloWorld对象的SpeakEnglish 和SpeakFrench方法。所有的要求就是SpeakEnglish 和SpeakFrench和SayGoodMorning委托有同样的标记式。通过示例委托,可以完成引
9 7 3 1 2 3 4 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

本周软件下载排行

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203