ECom: 接口的完成


CS0000835

 开发伙伴平台:
S60 3rd Edition, FP1

 详细描述
下列代码示例演示了如何完成基类的ECom组件

 前言和重要问题
MMP文件中的UID2(0x10009D8D)应该为0x10009D8D,表示是ECom插件,UID3(0xE01F5465)为ECom DLL的UID接口的UID可以从保护或未保护的区域选择,这个依赖于你定下的certification path。这里我们使用未保护的UID,这样程序可以自签名即可。
如果插件DLL的UID改变了(相应rss文件中的名称也要改变),那么ECom框架就无法找到插件新的UID,可能需要删除开发环境下的ECom.ROM.Z.dat and Ecom.idx文件,如:/Symbian/9.1/S60_3rd_MR/Epoc32/winscw/c/private/10009D8F/目录下。当模拟器重启时,该文件会被重新生成。
ECom资源名必须要识别为ECom component/DLL名目标类型(TARGETTYPE)要为PLUGIN编译后的EComExample.rsc资源文件必须要拷贝到WINSCW环境下的/Epoc32/release/winscw/udeb/z/resource/plugins目录,具体查看MMP文件中的TARGETPATH属性。
 MMP文件
TARGET      EComExample.dll
TARGETTYPE  PLUGIN
 
...
 
UID 0x10009D8D 0xE01F5465
 
...
 
SOURCE      Proxy.cpp
SOURCE      CMyHelloEcom.cpp  // Your ECom impl
 
...
 
// Import base class header and inline file
USERINCLUDE     ../interface
SYSTEMINCLUDE   /epoc32/include
SYSTEMINCLUDE   /epoc32/include/ecom
 
// ECom resource name must be identical to ECom component/DLL name.
START RESOURCE E01F5465.rss
TARGET EComExample.rsc
TARGETPATH /resource/plugins
END
 头文件
这个头文件派生自ECom基类
// Include base class header
#include <CHelloEcomIF.h>
 
class CMyHelloEcom : public CHelloEcomIF
    {
public:
    static CMyHelloEcom* NewL();
    virtual ~CImplementationClassOne();
 
    // Implementation of CHelloEcomIF
    void SayHello(TDes& aString);
 
private:
    CMyHelloEcom();
    void ConstructL();
    };
 
private:
    HBufC* iDescriptor;

 源文件
这里必须要完成定义在基类中的虚函数SayHello(TDes& aString)
#include "CMyHelloEcom.h"
 
CMyHelloEcom* CMyHelloEcom::NewL()
    {
    CMyHelloEcom* self=new(ELeave) CMyHelloEcom();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }
 
CMyHelloEcom::~CMyHelloEcom()
    {
    delete iDescriptor;
    }
 
CMyHelloEcom::CMyHelloEcom()
    {
    }
 
void CMyHelloEcom::ConstructL()
    {
    }
 
// Implementation of CHelloEcomIF
void CMyHelloEcom::SayHello(TDes& aString)
    {
    aString.Copy(*iDescriptor);
    }
 插件资源文件
这个资源文件描述了插件DLL的内容,它定义了IMPLEMENTATION_INFO用以描述不同的完成。ECOM框架则使用
IMPLEMENTATION_INFO::implementation_uid查找被询问的客户端接口完成。
#include "RegistryInfo.rh"
 
RESOURCE REGISTRY_INFO theInfo
    {
    // UID for the DLL
    dll_uid = 0xE01F5465;
    // Declare an array of interface info
    interfaces =
        {
        INTERFACE_INFO
            {
            // UID of the interface that is implemented
            interface_uid = 0xE0009DC1;
            implementations =
                {
                // Info for implementation of CHelloEcomIF
                IMPLEMENTATION_INFO
                    {
                    implementation_uid = 0xE0009DC7;
                    version_no = 1;
                    display_name = "ecomexample";
                    opaque_data = "";
                    default_data = "ecomexample";
                    }
                };
            }
        };
    }
 Proxy
定义的完成位于DLL中。ECom框架可以使用TImplementationProxy项将实际完成的方法(NewL)映射为ID,TImplementationProxy中每个完成的ID在资源文件中必须如下描述:
#include <e32std.h>
#include <ImplementationProxy.h>
#include "CMyHelloEcom.h"
 
// Maps the interface UIDs to implementation factory functions
const TImplementationProxy ImplementationTable[] =
    {
    IMPLEMENTATION_PROXY_ENTRY(0xE0009DC7, CMyHelloEcom::NewL)
    };
 
// Exported proxy for instantiation method resolution
EXPORT_C const TImplementationProxy* ImplementationGroupProxy
(TInt& aTableCount)
    {
    aTableCount =
        sizeof(ImplementationTable) / sizeof(TImplementationProxy);
    return ImplementationTable;
    }
 后记
如上方法ECom接口已经完成了。ECom组件需要一个对应的资源文件。已完成的factory functions定义在"proxy"中。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值