Symbian操作系统结构之一:DLL
2009-07-14 11:06
274 查看
*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的发布版本发布必须保证顺序的不变性
*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的发布版本发布必须保证顺序的不变性
相关文章推荐
- Symbian操作系统结构之一:DLL
- Symbian操作系统结构之二:可写静态数据
- Symbian操作系统结构之三:ROM和RAM中的可执行文件
- Symbian操作系统结构之五:进程
- Symbian操作系统结构之四:线程
- Symbian操作系统开发包
- 操作系统概念学习笔记 4 操作系统结构和操作简述
- 操作系统的文件结构
- [转]ASP.NET MVC 入门2、项目的目录结构与核心的DLL
- ubuntu 操作系统的目录结构
- Symbian DLL中可写静态数据问题
- 【Symbian基础知识整理】_Symbian的目录结构和程序编译链接的简单过程
- ASP.NET MVC 入门(2) 项目的目录结构与核心的DLL
- 不同操作系统中MySQL安装目录结构
- Symbian操作系统
- 2.1 操作系统的类型与结构
- 读书笔记之: 操作系统概念(第6版)-第四部分 IO系统(I/O系统, 大容量存储结构)
- 《Linux 操作系统结构分析》《Linux操作系统原理与应用》对比
- Linux操作系统的目录结构
- 温故知新之计算机操作系统--存储器体系结构