Symbian Ecom 浅谈

首先说下Symbian Ecom框架的核心思想,其实就是C++的虚函数和抽象类,也就是C++的多态。

一个Ecom的工程需要3个子工程(因为在Cabide中好像不可以直接创建Ecom的新工程,所以我一些例子自己尝试写了下)

    <1>、 需要一个Ecom的接口类(interface工程);

    <2>、 插件类的实现(plugin工程);

    <3>、 调用接口类的client(界面显示工程);

在整个Ecom工程中的引导文件中,只需要添加接口工程和界面工程中的编译文件(.mmp)

eg:

PRJ_MMPFILES
../plugin/group/EcomPlugin.mmp
../client/Group/EcomTest.mmp

<1>、先来说下接口类的实现(interface):

接口类需要三个主要的东东,

  (1)、工厂函数;

  (2)、纯虚函数(接口);

   (3)、TUid的成员对象;

class EComInterface : public CBase
 {
public:

 //工厂的方法
 static EComInterface* NewL(const TDesC8& aOperationName);
 virtual ~EComInterface();
public:

 //接口的方法
 virtual TReal Calculate(TReal aA,TReal aB) = 0 ;
private:
 //实现的标示
 TUid iDor_ID_Key;
 };

实现工程的方法是在一个内联文件中,文件名一般是“.inl”;

inline EComInterface::~EComInterface()
 {

 //根据iDor_ID_Key调用delete方法把工厂函数获得的接口释放掉
 REComSession::DestroyedImplementation (iDor_ID_Key);
 }

inline EComInterface* EComInterface::NewL(const TDesC8& aOperationName)
 {

 //这个UID很重要,他必须和plugin 工程资源文件的interface_uid 相同,不然这个工厂函数不能调用具体的实现,这UID就是去找具体实现的依据。
 const TUid KCalculateInterfaceUid = {0xE0009DC2};
 
 TEComResolverParams resolverParams;
 resolverParams.SetDataType (aOperationName);
 resolverParams.SetWildcardMatch (ETrue);
 

// 这个iDor_ID_Key系统会自动分配,用于标识接口类创建的实现
 TAny* interface = REComSession::CreateImplementationL(
   KCalculateInterfaceUid, _FOFF (EComInterface, iDor_ID_Key),
   resolverParams);
 
 return reinterpret_cast <EComInterface*> (interface);
 }


这样就把接口类给实现好了(当然还可以实现一个解析器类,但是不是必须的);

<2>、其次说说插件工程(plugin)

   这个类主要继承接口类,需要实现接口类中的虚函数。

这里主要说说资源文件和代理的实现:

代理这个文件主要是实现一个函数和一个数组:

const TImplementationProxy ImplementationTable[] =
{
  IMPLEMENTATION_PROXY_ENTRY(0xE0009DC5, EComImplemetationPlus::NewL),
  IMPLEMENTATION_PROXY_ENTRY(0xE0009DC6, EComImplemetationMutiply::NewL)
};

EXPORT_C const TImplementationProxy *
 ImplementationGroupProxy(TInt& aTableCount)
 {
 aTableCount = sizeof(ImplementationTable) /
  sizeof(TImplementationProxy);
 return ImplementationTable;
 }

这里的两个UID 0xE0009DC5和0xE0009DC6 必须和该资源的文件的implementation_uid 相同,这样框架才能找到具体去实现哪一个插件的对象(也就是调用EComImplemetationPlus::NewL 或者EComImplemetationMutiply::NewL)。

这里资源文件的名字必须是dll_uid + ".RSS" 这个dll_uid同样是client工程里面的UID3

RESOURCE REGISTRY_INFO theInfo
 {
 dll_uid = 0xE3CCB235;
 interfaces=
  {
   INTERFACE_INFO
    {
    interface_uid = 0xE0009DC2;
    implementations =
     {
     IMPLEMENTATION_INFO
      {
      implementation_uid = 0xE0009DC5;
      version_no = 1;
      display_name = "plus";
      default_data = "sum";
      opaque_data = "";
      },
      IMPLEMENTATION_INFO
      {
      implementation_uid = 0xE0009DC6;
      version_no = 1;
      display_name = "multiply";
      default_data = "multiply";
      opaque_data = "";
      }
     };
    }
  };
 }


这个子工程里面的mmp文件:

TARGET   EComCalculatePlugin.dll
TARGETTYPE  PLUGIN
UID    0x10009D8D 0xE3CCB235
CAPABILITY      NONE

SOURCEPATH      ../src
SOURCE          proxy.cpp
SOURCE          EComImplemetationMutiply.cpp
SOURCE          EComImplemetationPlus.cpp

USERINCLUDE     . ../../interface ../inc
SYSTEMINCLUDE   /epoc32/include
SYSTEMINCLUDE   /epoc32/include/ecom

START RESOURCE  ../data/E3CCB235.RSS
    TARGET  EComCalculatePlugin.rsc
END

LIBRARY euser.lib ECom.lib

0x10009D8D这个是UID2,因为本工程是插件,所以UID2必须是这个16进制的数,这个好像是规定的。

这里还有一个文件名位main.cpp 他是DLL插件的main 函数:

#include <e32base.h>

GLDEF_C TInt E32DLL()
 {
 return (KErrNone);
 }

<3>  最后就是这个工程的节目显示(client)

 这工程里面就比较简单了,该怎么写就怎么写,和一般的GUI程序时一样的。

调用工厂函数时:EComInterface* comInterface = EComInterface::NewL(aOperationName);

aOperationName 是参数,这个参数和plugin里面的资源文件中的default_data是一样的。

调用接口函数时:aResult = comInterface->Calculate(aA,aB);这个指针会自动调用相应对象的接口函数。

 注:

     文章中颜色相同的是同一个UID,这个很重要的所以特别标注了下.

其他的就没有什么了,我就是这样做的,如果有什么问题,希望各位大侠指出

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dymx101/archive/2010/03/18/5392135.aspx

1、软件说明 ecom串口助手是一款串口(RS232)调试软件。由我爱IC导航网(http://www.52ic.net/)工作室开发。 ecom串口助手支持常用的1200 ~ 921600bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进 制接收或发送任何数据或字符(包括中文),能发送任意大小的文本文件,可以任意设定自动发送周期, 并能将接收数据保存成文本文件。 是工程师调试单片机串口的好助手工具。 2、软件特点 1、 支持Windows 9x / 2000 / XP / 2003 / Vista / Win7系统; 2、 绿色软件,不需安装。运行解压软件,将压缩包解压到指定目录即可。卸载时只需将程序目录删除; 3、 支持常用的1200 ~ 921600bps波特率; 4、 端口范围是COM1-COM255,支持扩展端口(USB转RS232); 5、 能设置校验、数据位和停止位; 6、 能以字符或十六进制收发数据,支持中文字符的收发; 7、 支持文件数据的发送; 8、 数据发送区允许设置发送周期,自动发送数据; 9、 支持键盘输入,将键盘数据发送到串口; 10、 支持定时保存接收窗口数据,便于查看长时间调试记录信息; 11、 有效的检测通讯错误,避免软件死机(如USB转串口设备拔出检测); 12、 数据接收窗口及文件发送均采用多线程设计。 V2.00版本增加功能 1、添加Xmodem功能(128个字节发送,只支持CRC校验)。 2、增加Xmodem-1k功能(1024个字节发送,只支持CRC校验)。 3、支持命令启动Xmodem-1k功能(可以做自动传输文件功能)。 3、使用许可 本软件为免费软件,许可"个人用户"自由使用,复制和分发此软件包,但要保证此软件包的完整性。您 不能将本软件用于商业目的,如需要商业使用,需得到软件作者的授权许可。 4、拒绝担保 我爱IC导航网保证该软件不含任何木马、病毒等能够对您的系统造成破坏的恶意代码。但拒绝任何责任 担保,对因使用或不能使用该软件所导致的全部风险及后果均由用户自己承担。 5、关于我爱IC导航网 最专业的电子导航网,IT导航网。我爱IC导航网(http://www.52ic.net)定位为嵌入式行业、IT行业最权 威的分类网站导航网站,力求将最新最好最全的网站推荐给广大从事的IT行业的朋友。网站的宗旨是方便从事 嵌入式行业、IT行业的工程师、采购及管理者快速找到自已需要的网站,而不用去记太多复杂的网址;同时提 供了IC数据手册搜索及知名搜索引擎入口等服务项目,让您轻松愉快的享受网络给您工作带来便利和乐趣。 我爱IC导航网(http://www.52ic.net)主要以电子行业资料为中心,提供丰富的,最常用和快捷的网站链接 和各类工具。其中包括了数据手册搜索,各类电子原厂链接,各家授权代理链接,知名的行业网站链接,技术论 坛链接等,也提供了包括日常使用的工具,如快滤波器计算,三极管开关饱和度计算,在线翻译,天气查询等实 用工具。同时,我爱IC导航网还提供了用户常用的生活链接,如邮箱,音乐,视频,体育,军事等众多知名网站 链接。 我爱IC导航网,技术精灵频道(http://ee.52ic.net)主要是为电子工程师学习嵌入式技术提供良好的平台。 站长及朋友会在本站上写下工作中的经验以供大家学习,同时从网上精选有价值的文章供电子工程师在项目中 参考。网站尽可能的减少广告的投放,保证文章的可阅读性。 6、版权申明 Copyright(C) 2011-2020, 52ic.net All rights reserved. WWW : http://www.52ic.net http://ee.52ic.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值