在Symbian中动态加载DLL

本文介绍如何在Symbian系统中动态加载DLL,并通过示例代码详细讲解了创建DLL及在应用程序中使用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Symbian中动态加载DLL
2008年08月27日 星期三 下午 05:05
       大家好,在Windows系统中我们能很熟练的动态的引入动态链接,但在Symbian中我还没发现此类文章。这里就把我最近在写程序时的一些发现跟大家分享一下,也希望能起一个抛砖引玉的作用。
       我想大家对Symbian已经有了基本的了解,我就不再介绍了。总起来说,我感觉Symbian和Windows系统相当的相似,而S60的编程框架和MFC又有八分相近。那么,在Windows中我们能动态的引入DLL那在Symbian中也应该可以。就做了个小测试,过程如下:
一、编写动态链接库
    首先建立一个工程文件DllTry.mmp内容如下:
TARGET DllTry.dll
TARGETTYPE dll
UID 0x1000008d 0x2000118d
SOURCEPATH ../src
SOURCE DllTry.cpp
USERINCLUDE . ../inc
SYSTEMINCLUDE /epoc32/include
LIBRARY euser.lib
EXPORTUNFROZEN
建立bld.inf文件,如下:
PRJ_MMPFILES
../src/DllTry.mmp
       头文件DllTry.h,如下:
              #ifndef __DLL_TRY_H
#define __DLL_TRY_H
              #ifndef __W32STD_H__
              #include <w32std.h>
              #endif
              #ifndef __E32STD_H__
              #include <E32STD.H>
              #endif
              #ifndef __E32BASE_H__
              #include <e32base.H>
              #endif
              class CDllTry : public Cbase {
              public:
                     static CDllTry* NewL();
                     static CDllTry* NewLC();
                     virtual TBool TestMethod();
                     TInt ii;
                     CDllTry();
                     ~CDllTry();
              private:
                     void ConstructL();
              };
              EXPORT_C CDllTry* Create(); //声明导出函数
              #endif
       代码文件DllTry.cpp,如下:
#include "DllTry.h"
//入口
EXPORT_C TInt E32Dll(TDllReason) {
                     return KErrNone;
}
//实例化CDllTry
EXPORT_C CDllTry* Create() {
                     return CDllTry::NewL();
}
CDllTry* CDllTry::NewL() {
                     CDllTry* self = NewLC();
       CleanupStack::Pop(self);
       return self;
}
CDllTry* CDllTry::NewLC() {
       CDllTry* self = new(ELeave) CDllTry();
       CleanupStack::PushL(self);
       self->ConstructL();
       return self;
}
              TBool CDllTry::TestMethod() {
       return ETrue;
}
CDllTry::CDllTry() {}
CDllTry::~CDllTry() {}
void CDllTry::ConstructL() {
       ii=99; //可以是随便的一个数
}
              然后,编译,把头文件DllTry.h复制到测试程序的inc目录,把DllTry.dll复制到某一特定目录(如z:/system下)。
二、实现测试程序
       随便建立一个工程,在想导入DLL的地方输入代码如下:
              RLibrary lib;
              TLibraryFunction Create= NULL;           //函数指针
       if( lib.Load ( _L("DllTry.dll/n") , _L("z://system//") ) != KErrNone)       //动态导入DLL
                     User::Exit( 40 );
              //至此,导入完成!
              Create=lib.Lookup ( 1 );               //获得第一个导出函数
              iDllTry= (CDllTry*) Create(); //利用这个函数实例化CDllTry
              if( !iDllTry )
                     User::Exit( 41 );
       大家知道,在一定条件下(用同一编译器等)我们可以通过指针(当然引用也行)调用DLL文件中声明的类的虚函数。代码如下:
              if(!iDllTry->TestMethod () )
       User::Exit(43);
       提示:
1、 在导出函数前必须加EXPORT_C;
2、 在.exe或.app中引用的.dll中的成员函数一定要为虚函数(virtual);
3、 .dll文件生成后在D:/Symbian/6.1/Series60/Epoc32/Release/wins/udeb类似的目录下;
4、 千万别忘了在.exe或.app工程里加入DllTry.h文件;
5、 第一个UID用来标志dll文件,第二个是自己向Symbian申请的。
       大家自己试一试吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值