Symbian OS Ecom介绍

来源:互联网 发布:索菲亚kd软件视频教程 编辑:程序博客网 时间:2024/04/29 00:00

Ecom是一种Symbian操作系统的通用架构,它通过插件模块来提供和使用各种功能。要使用ECom,我们就应当知道程序如何使用ECom架构来访问插件,如何定义一个插件能够实现的抽象接口,以及如何实现插件。

在C++中,抽象基类和煦函数意味着程序能够在不知道提供实现的具体类的情况下来调用,访问接口。这是一个非常有用的机制,它使得我们能够先定义接口,而后编写实现该接口的代码。这种实现就是我们所知道的插件。

在Symbian OS早期的版本中,这种实现是由多态接口动态连接库来实现的。这意味着所有在Symbian中需要使用插件的框架都不得提供他们自己的机制来让客户发现和实例化可用的实现。

而Ecom通过引入了一个通用的框架去掉了这些重复复的功能。

就是我们所知道的插件(plug-in)。该框架提供了一个single mechanism 来 
1、注册和发现接口的实现。
2、选择使用一个合适的实现
3、提供插件的版本控制。

为了弄清楚ECom是如何做到这些的,我们了解一下任意一个插件系统的都具备的本质。首先,一个客户端希望访问一个对象来完成某些处理。而该对象的细节直到运行之前我们是不知道的。这些处理的基本特征是知道的并且被定义在接口当中,但是可能存在几个处理所需要的变量,这些变量由支持该接口的实现来提供。 

在这样一个系统中有四个清晰定义的角色

1. 希望访问服务的客户端。
2. 如何获取服务的接口。
3. 提供所需处理的接口实现。
4. 让客户能够访问实现的框架。

它们的关系如下列UML图所示:

实例化机制形成了该系统的中枢 ,它负责提供用于在运行时识别和载入正确接口实现的服务。Ecom就是这样一个框架。

在总结ECom的功能之前,我们将从接口客户端,接口实现以及接口定义几个不同的角度来审视这个系统。

接口客户端:

使用ECom实现的插件框架客户端使用由框架提供的C++接口,不需要特别的其他步骤。整个客户端需要做的如下所示:
1. 连接到ECom框架库,ecom.lib
2. include接口定义文件(.h头文件)
3. 通过接口的NewL()函数来获取一个object.通常客户端将传递一些数据来表明它所需要的对象的特征.客户端也能够直接传递某些数据给对象.
4. 使用object
5. 当使用结束时,删除该Object.
6. 调用 REComSession::FinalClose()来清理内存.

接口定义:
对使用ECom框架工作的插件来说,接口定义有两个目的.
 1.它定义提供服务给客户的函数,这些函数一般是pure vitual.实现通过继承这些接口来提供具体的功能. 
 2.它提供了object实例化函数.这个函数不用创建接口定义类自身实例:而是使用ECom来创建一个所需的实现的接口,并把它返回给客户端.类似的,接口的析构函数通知ECom这个Object被销毁.(如下图所示). 

通常, 接口定义提供给ECom一个indication以表明应该使用的可用实现. 该Indication可以是直接的,如用于识别一个特定实现的UID,也可以是间接的,如对应于一个实现的自我描述的数据.

这种选择处理别称为resolution,而实现它的实体被称为resolver.ECom提供了一个默认的resolver,但是如果需要的话.接口定义能够提供他们自己的专门的resolvers.

 

Ecom是一种Symbian操作系统的通用架构,它通过插件模块来提供和使用各种功能。要使用ECom,我们就应当知道程序如何使用ECom架构来访问插件,如何定义一个插件能够实现的抽象接口,以及如何实现插件。

在C++中,抽象基类和煦函数意味着程序能够在不知道提供实现的具体类的情况下来调用,访问接口。这是一个非常有用的机制,它使得我们能够先定义接口,而后编写实现该接口的代码。这种实现就是我们所知道的插件。

在Symbian OS早期的版本中,这种实现是由多态接口动态连接库来实现的。这意味着所有在Symbian中需要使用插件的框架都不得提供他们自己的机制来让客户发现和实例化可用的实现。

而Ecom通过引入了一个通用的框架去掉了这些重复复的功能。

就是我们所知道的插件(plug-in)。该框架提供了一个single mechanism 来 
1、注册和发现接口的实现。
2、选择使用一个合适的实现
3、提供插件的版本控制。

为了弄清楚ECom是如何做到这些的,我们了解一下任意一个插件系统的都具备的本质。首先,一个客户端希望访问一个对象来完成某些处理。而该对象的细节直到运行之前我们是不知道的。这些处理的基本特征是知道的并且被定义在接口当中,但是可能存在几个处理所需要的变量,这些变量由支持该接口的实现来提供。 

在这样一个系统中有四个清晰定义的角色

1. 希望访问服务的客户端。
2. 如何获取服务的接口。
3. 提供所需处理的接口实现。
4. 让客户能够访问实现的框架。

它们的关系如下列UML图所示:

实例化机制形成了该系统的中枢 ,它负责提供用于在运行时识别和载入正确接口实现的服务。Ecom就是这样一个框架。

在总结ECom的功能之前,我们将从接口客户端,接口实现以及接口定义几个不同的角度来审视这个系统。

接口客户端:

使用ECom实现的插件框架客户端使用由框架提供的C++接口,不需要特别的其他步骤。整个客户端需要做的如下所示:
1. 连接到ECom框架库,ecom.lib
2. include接口定义文件(.h头文件)
3. 通过接口的NewL()函数来获取一个object.通常客户端将传递一些数据来表明它所需要的对象的特征.客户端也能够直接传递某些数据给对象.
4. 使用object
5. 当使用结束时,删除该Object.
6. 调用 REComSession::FinalClose()来清理内存.

接口定义:
对使用ECom框架工作的插件来说,接口定义有两个目的.
 1.它定义提供服务给客户的函数,这些函数一般是pure vitual.实现通过继承这些接口来提供具体的功能. 
 2.它提供了object实例化函数.这个函数不用创建接口定义类自身实例:而是使用ECom来创建一个所需的实现的接口,并把它返回给客户端.类似的,接口的析构函数通知ECom这个Object被销毁.(如下图所示). 

通常, 接口定义提供给ECom一个indication以表明应该使用的可用实现. 该Indication可以是直接的,如用于识别一个特定实现的UID,也可以是间接的,如对应于一个实现的自我描述的数据.

这种选择处理别称为resolution,而实现它的实体被称为resolver.ECom提供了一个默认的resolver,但是如果需要的话.接口定义能够提供他们自己的专门的resolvers.

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/classicalmusiclover/archive/2008/09/02/2867696.aspx