Symbian操作系统结构之一:DLL

 转自http://blog.sina.com.cn/s/blog_6017017a0100dvmg.html

 

*DLL(动态链接库)是经过编译的C++代码,它们可以被正在行动的进程载入


*Symbian操作系统中的DLL主要分为两类
 - 共享库DLL(静态接口)
 - 多态接口DLL(插件)

 

*共享库DLL
 - 共享库根据模块定义文件(.def)导出API函数
 - 导出函数数目是任意的
 - 每一个导出函数都是DLL的一个进入点
 - 共享库发布一个头文件(.h)和一导入库(.lib)用以解析导出函数
 - 当使用共享库的可执行代码运行时,操作系统加载器会载入其使用的所有DLL,以及这些DLL会使用到的其它DLL
 
*多态接口DLL
 - 实现由框架单独定义的抽象接口
 - 通常使用不同的扩展名来表示DLL的本质区别,比如
 •文件系统插件使用.fsy
 •协议模块插件使用.prt
 - 具有单独的接入点“工厂”函数,用于实例化
 - 通常用于实现固定接口的不同实现(插件)
 - 从Symbian操作系统v7.0开始,最常用的插件是ECOM插件

 

*DLL使用的UID
 - Symbian操作系统UID是32位的,用于唯一 标识文件类型
 - Symbian操作系统使用三种UID组合来唯一地标识一个二进制可执行文件
 - 对于DLL,这三种UID分别是
•UID1:系统范围区分EXE和DLL
  - 对于EXE,targettype为exe   (targettype是在mmp文件中定义的)
  - 对于共享库,targettype为DLL
  - 对于多态ECOM插件DLL,targettype为PLUGIN
•UID2:区分共享DLL和多态接口DLL
•UID3:唯一地标识组件,需要Symbian签名


*从DLL中导出函数
 - 共享库DLL通过导出函数来提供对其API的访问
 - 在Symbian操作系统中,每一个需要导出的函数需要在其头文件定义之前加上IMPORT_C宏
 - 对应的函数需要在.cpp文件中加上EXPORT_C
class CMyExample : public CSomeBase
{
 public:
  IMPORT_C static CMyExample* NewL();
 public:
  IMPORT_C void Foo();
 …………
};

EXPORT_C CMyExample* CMyExample :: NewL()
{……}

EXPORT_C void CMyExample :: Foo()
{……}   


*从DLL中导出函数的原则
 - 内联函数不能被导出,因为没有必要
 ·不用导出,调用者已经可以通过头文件进行访问
 - 只有需要在DLL之外使用的函数才有必要导出
 ·私有函数无法被客户端访问
 - 所有的虚函数,不论是公共的,受保护的,还是私有的,都应该被导出
 ·派生类可能对它们进行重新实现

 

*按顺序和按名字查找函数
 - 在大多数操作系统中,DLL的接入点可以按照其名字或着按照其导出的顺序来识别
 - Symbian操作系统不提供按名字查找函数的机制,因为它会为DLL大小造成额外的开销
 - Symbian操作系统只支持按顺序查找函数
 ·DLL的发布版本发布必须保证顺序的不变性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值