ECom Step by Step(转)

2008-01-14 22:03本文摘自http://casper1314.spaces.live.com/blog/cns!5C29B0743964E16!164.entry

ECom step by step 1
      第一步, 明白什么是ECom。 ECom不是个class,不是个function, ECom是个Framework。 Famework当然代表着一个Mechanism。Mechanism就是规则,是“爷”级人物制定的, 是“爹”级人物执行的,是“儿”级人物遵守的,也是给“孙子”们去破坏的。 所以无论想当哪一类人, 搞清楚“规则”是前提。     在ECom这个Mechanism中, 有这样几个角色, Application, ECom, Resolver, Plug-in。作为应用程序的源动力最我要干什么, 而不是ECom能干什么。 我要在我的Application中调用plug-in的方法,完成特定的功能。 ECom处在这个供需关系中, 则是为了帮我找到恰当的plug-in。 进而Resolver再帮我从Plug-in中找到我要的那个方法。显然ECom的一大好处就是替开发者作了很多事。 当然这不是设计ECom的全部目的。     ECom的Mechanism其实就是房屋中介的基本商业模式,ECom就是链家,我爱我家什么的。     Application当然要我写, 在里面调用构造Plug-in,就是向ECom发出请求。     Plug-in写必须提前写好,并到ECom里注册,否则ECom怎么找到你。     本来ECom提供了一个Resolver,如果你不满意,也可以自己写一个,从CResolver继承,然后注册到ECom里去, 将来构造Plug-in的实例时,可以把它作为参数传进去。     至于ECom如何找到Plug-in,如何Load,如何销毁,Symbian已经做好了。     所以需要程序员写的就是Application、plug-in、Resolver。     诺基亚说:“ECom是C/S架构,提供了实例化、解析、销毁插件的服务。”

ECom Step by Step 2
     插件是遵循一定的接口规范编写出来的应用程序。所以编写插件必然要用利用C++的多态性,完成接口类和实现类。
     另外,插件是如何被调用的。插件的主要作用是在不必修改实现应用程序的前提下,完成应功能扩展。调用机制必须提前在应用程序中做好。由于该机制成熟且频繁使用,多把这种机制从应用程序中提炼出上升到操作系统级。如IE中的ActiveX,需要到注册表中注册后才能被使用。
     接下来我们将看到, ECom下的plug-in也有接口和实现,也要注册,保持了传统插件的特性。
Plug-in的工程文件的建立
     Plug-in本质上是一个多态Dll,所以在工程文件中,TARGET是一个dll文件,而TARGETTYPE在3.0之后的程序里是PLUGIN,3.0以前的程序里是ECOMIIC。注意不是DLL,那样就会生成一个dll+lib,变成普通的Dll了。
创建Plug-in的步骤
     ECom中的Plug-in的结构如图所示。
     Plug-in由三部分组成,每部分都用一个UID标识。ECom就是通过注册的UID找到正确的对象的指针。
     所以,实现一个Plug-in,总的来说有五步,完成Plug-in每个层次的构造和注册UID,导出UID表以便ECom能从代码里访问。
1.入口层
    在S60 3.0以前的应用程序中,这个入口要显示的写出来,
    TInt E32DLL()
    {
        return KErrNone;
    }
    标准的dll入口。3.0之后则不用。
2.接口层
    定义一个接口类,类中定义一个构造函数NewL和一些提供功能的虚函数。另外还有一个成员变量TUid iDtor_ID_Key,该变量只在析构Plug-in时会用到。在应用程序中只调用这些方法。
    NewL里调用方法REComSession::CreateImplementationL,用来通过RCom构造plug-in的实例,并把接口返回给应用程序。
    REComSession::CreateImplementationL有带解析器和不带解析器两个版本。带解析器的版本需要把解析器的UID和解析关键字作为参数传进去。ECom通过解析器UID找到解析器,并且把Inferface UID和解析关键字作为参数传入解析器。
    解析器会返回实现类的UID给ECom,ECom再根据这个UID构造plug-in的实例并把接口指针返回给应用程序。
3.实现层。
    继承接口类并实现所有的纯虚方法。  
4.注册。
    Plug-in的层次结构要在资源文件中注册出来。 就好像会在ActiveX在注册表中注册一样。资源文件里标明了plug-in的每一部分的UID,此外还定义了plug-in的一些属性,包括用来解析的关键字等等。 注意2.0和3.0的dll uid不同。
不带解析器的版本, ECom会使用默认的解析器。
5.导出。
   需要构造一张UID表并返回给框架。

至此,Plug-in构造完毕。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值