现在的位置: 首页 > 综合 > 正文

Symbian ECom插件实例详解

2013年08月05日 ⁄ 综合 ⁄ 共 1874字 ⁄ 字号 评论关闭
1.什么是ECom
ECom是一种客户端/服务器框架,为插件的实例化、解析,及析构等提供了服务。从本质上讲,它是把许多应用程序的功能性需求放到一个DLL中,并供客户端通过接口去访问。
ECom plug-in是S60 2nd中引进的,出现在Symbian OS v7.0s以及以后的版本中,在第三版中有所改动。
插件是遵循一定的接口规范编写出来的应用程序。所以编写插件必然要用利用C++的多态性,完成接口类和实现类。插件的主要作用是在不必修改实现应用程序的前提下,完成应功能扩展。调用机制必须提前在应用程序中做好。

2.ECom体系结构
ECom体系结构包括以下几个组件:
1) 接口定义
2) 接口的实现
3) ECom框架
4) 解析器

3.EComShape(nokia forum提供的实例)目录结构
/client--客户端,使用插件
/plugin--插件的实现
/shaperesolver--解析器
/shaperesolver/inc/shapinterface.h 接口定义

4.接口定义
/shaperesolver/inc/shapinterface.h
/shaperesolver/inc/shapinterface.inl
包括:
实例化函数 NewL,插件的导出函数
析构函数 ~CShape
提供功能的纯虚函数 Draw
成员变量 TUid iDtor_ID_Key

5.ECom框架
1)EComp客户端
通过使用REComSession来请求完成解析、构造、析构等基本功能。
2)ECom服务器端
管理clinet的请求
实现和资源文件在Symbian OS V9.1之前放于/symbian/libs/plugins
之后
实现放于/sys/bin
资源文件放于/Resource/Plugins

6.2nd到3nd的变化
UID3从0x1xxxxxxx变为0xExxxxxxx
3nd中需要在AppUi的析构函数中调用REcomSession::FinalClose()去释放插件DLL。
.mmp文件中的对象类型--TARGETTYPE从ECOMIIC变为PLUGIN。
资源文件名也有所改变:
START RESOURCE 101F5465.RSS
TARGET EComCalculatePlugin.rsc
END
第三版的rsc名要求和dll的一样,而二版中要求和UID3一样.
在三版中IMPLEMENTATION_PROXY_ENTRY被用在实现表中,详见proxy.cpp.
const TImplementationProxy ImplementationTable[] =
{
#ifdef __SERIES60_3X__
IMPLEMENTATION_PROXY_ENTRY(0x101F614E,
CShapeResolver::NewL)
#else
{{0x101F614E}, CShapeResolver::NewL}
#endif
};
ECom的入口函数:
TInt E32DLL()
{
return KErrNone;
}
2nd需要写出来,3nd中不需要.

7.自定义解析器--custom resolver
当需要不同的选择算法时,我们会提供自定义的resolver,在EComShape中提供了自定义的resolver,在EComCalculator中是使用的默认resolver.
resolver 也是一个ECom plug-in.它需要继承CResolver,以下三点是必须定义或实现的:
1)构造函数的需要传入MPublicRegistry对象
2)要实现IdentifyImplementationL和ListAllL这两个纯虚函数
3)在三版中需要ProtSev(准许服务器应用可以用一个受保护的名字进行注册。受保护的名字以"!"开头)能力.

8.ECom注册
ECom的注册是写在一个rss文件中,编译生成rsc文件,并放于系统ECom插件注册目录下,这样系统就能找到你是ECom DLL.
RSS编译后产生的RSC文件名2nd要和UID3一样,3nd要和DLL名一样.
rss中需要#include <ecom/RegistryInfo.rh>
具体结构可以查看例子,^~^.

9.NOTE
如果插件的UID发生变化,ECom的框架新插件,就必须删除下面两个文件:
ECom.ROM.dat
ECom.idx
2nd中文件在:/Series60_v20/Epoc32/wins/c/system/data/Plugins
3nd中文件在:/S60_3rd/Epoc32/winscw/c/private/10009D8F

抱歉!评论已关闭.