Symbian DLL(Dynamic Link Library 动态链接库)

 

Symbian 系统 支持两种类型的DLL:
  (1)静态接口DLL
  (2)多态接口DLL

 

(1)静态接口DLL

静态接口DLL 在主调程序启动的时候被系统自动载入到手机内存里面(唯一的例外是
如果该DLL 是在ROM只读存储器里面,那么可以直接通过它的地址进行调用)。并且
如果没有外部程序使用它了,它将被自动的从内存中卸载。静态接口DLL 在系统内
提供了一系列唯一的函数(例如,两个具有相同导出函数的DLL 在系统中也不会混淆)
静态接口DLL 具有.dll 文件后缀,通常用于在Symbian 系统中实现应用程序引擎

 

1. 通过Carbide 向导创建一个动态库工程

2. 添加自己的相应的接口API 的定义(在.h) 和 实现(在.cpp)

3. 在mmp 你们添加EXPORTUNFROZEN(为了在DLL开发时方便,不用每次修改了dll 接口,都要去删除def, dll, lib等文件,最后定稿时需要去掉该选项,详细说明见最后) 和在dll工程里用到的lib

4.Build 动态库工程

5. Freeze Exports

6. 再次Build 动态库工程

7. 如果编译winscw版本,在工程目录/bwins, 你可以看到def 文件

8. 在epoc32/release/winscw/udeb下你可以找到相应的lib 和 dll 文件

9.在epoc32/include/下,你可以找到动态库中的.h文件

 

 

(2)多态接口DLL

多态接口DLL只有明确的通过调用RLibrary::Load()函数才能被载入到内存中,而且
在卸载的时候,也最好通过RLibrary::Close()函数进行卸载。多个多态接口DLL可以
为外部程序导出多个相同的函数名的函数。所以,这种DLL通常情况下被广泛应用于
实现某个应用程序框架功能扩展时候的插件。在Symbian系统中,多态接口DLL可以有
多种不同的文件后缀。其中最著名的一个就是.app结尾的(应用程序),.ldd(逻辑
设备驱动),.tsy和.csy(电话和通信服务模块)等等

 

调用DLL方式1:

1. 在你的工程mmp 文件中,添加 动态库Name.lib

2. 在你要引用动态库的.h 或者 .cpp文件中, #include <动态库Name.h>

3. 操作这个动态库就像操作普通类一样, 当然你只能使用该动态库中被EXPORT出来的函数.

 

调用DLL方式2:

1. 在你的工程mmp 文件中,添加 动态库Name.lib

2. 在你要引用动态库的.h 或者 .cpp文件中, #include <动态库Name.h>

3. 用法:

typedef CWolfeggLogger* (*NewLogger)(TDesC&, TDesC& );

 

            // dynamic call                       
            _LIT(DLLName, "z://system//WolfeggLogger.dll");
            const TInt KMaxLength = 100;
            RLibrary lib;
            if( lib.Load(DLLName) != KErrNone)      
                 {
                 RDebug::Print(_L("It's error!"));
                 User::Exit( 0 ); 
                 }
           
            NewLogger obj = (NewLogger)lib.Lookup(2);        
            CWolfeggLogger* logger = obj(logFilePath, phoneImsi);    
            logger->WriteL(CWolfeggLogger::EDebugLog, _L("Test text log"));
            delete logger;
            logger = NULL;
            lib.Close();

 

EXPORTUNFROZEN 介绍:

生成dll的一般步骤(不加EXPORTUNFROZEN):

bldmake bldfiles

abld reallyclean

abld build armv5 urel

 

abld freeze

 

bldmake bldfiles

abld reallyclean

abld build armv5 urel(通过这一步才会生成相应的lib文件,直接通过定稿的.def文件生成lib文件)

 

如果要修改dll API, 需要删除def, dll, lib等文件,重新执行以上步骤。

 

如果在开发阶段,需要经常修改dll API 和使用测试程序测试该 dll, 以上步骤就很繁琐 ,所以在mmp中加入EXPORTUNFROZEN后,不用每次修改了dll 接口,都要去删除def, dll, lib等文件,重新编译dll 并 freeze dll 即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值