编写Symbian动态加载DLL
http://www.rosoo.net/a/mobile_symbian/201007/9804.html
一、编写动态链接库
首先建立一个工程文件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复制到某一特定目录(如c:\下)。
二、实现测试程序
随便建立一个工程,在想导入DLL的地方输入代码如下:
- RLibrary lib;
- TLibraryFunction Create= NULL;
- if( lib.Load ( _L("DllTry.dll") , _L("c:\\") ) != KErrNone)
- User::Exit( 40 );
- Create=lib.Lookup ( 1 );
- Create();