您的位置:首页 > 其它

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的发布版本发布必须保证顺序的不变性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: