zelda

 

编写Symbian动态加载DLL

http://www.rosoo.net/a/mobile_symbian/201007/9804.html 

 

一、编写动态链接库

首先建立一个工程文件DllTry.mmp内容如下:

 

  1. TARGET DllTry.dll 
  2. TARGETTYPE dll 
  3. UID 0x1000008d 0x2000118d 
  4.  
  5. SOURCEPATH ..\src 
  6. SOURCE DllTry.cpp 
  7.  
  8. USERINCLUDE . ..\inc 
  9.  
  10. SYSTEMINCLUDE \epoc32\include 
  11. LIBRARY euser.lib 
  12.  
  13. EXPORTUNFROZEN 

建立bld.inf文件,如下:

PRJ_MMPFILES

..\src\DllTry.mmp

 

头文件DllTry.h,如下:

 

  1. #ifndef __DLL_TRY_H 
  2. #define __DLL_TRY_H 
  3.  
  4. #ifndef __W32STD_H__ 
  5. #include <w32std.h> 
  6. #endif 
  7.  
  8. #ifndef __E32STD_H__ 
  9. #include <E32STD.H> 
  10. #endif 
  11.  
  12. #ifndef __E32BASE_H__ 
  13. #include <e32base.H> 
  14. #endif 
  15.  
  16. class CDllTry : public Cbase { 
  17. public: 
  18.        static CDllTry* NewL(); 
  19.        static CDllTry* NewLC(); 
  20.        virtual TBool TestMethod(); 
  21.        TInt ii; 
  22.        CDllTry(); 
  23.        ~CDllTry(); 
  24. private: 
  25.        void ConstructL(); 
  26. }; 
  27.  
  28. EXPORT_C CDllTry* Create(); //声明导出函数 
  29.  
  30. #endif 

代码文件DllTry.cpp,如下:

 

  1. #include "DllTry.h" 
  2. //入口 
  3. EXPORT_C TInt E32Dll(TDllReason) { 
  4.                      return KErrNone; 
  5. } 
  6. //实例化CDllTry 
  7. EXPORT_C CDllTry* Create() { 
  8.                      return CDllTry::NewL(); 
  9. } 
  10.  
  11. CDllTry* CDllTry::NewL() { 
  12.                      CDllTry* self = NewLC(); 
  13.        CleanupStack::Pop(self); 
  14.        return self; 
  15. } 
  16. CDllTry* CDllTry::NewLC() { 
  17.        CDllTry* self = new(ELeave) CDllTry(); 
  18.        CleanupStack::PushL(self); 
  19.        self->ConstructL(); 
  20.        return self; 
  21. } 
  22.               TBool CDllTry::TestMethod() { 
  23.        return ETrue; 
  24. } 
  25. CDllTry::CDllTry() {} 
  26. CDllTry::~CDllTry() {} 
  27. void CDllTry::ConstructL() { 
  28.        ii=99; //可以是随便的一个数 
  29. } 

然后,编译,把头文件DllTry.h复制到测试程序的inc目录,把DllTry.dll复制到某一特定目录(如c:\下)。

 

二、实现测试程序

随便建立一个工程,在想导入DLL的地方输入代码如下:

 

  1. RLibrary lib; 
  2. TLibraryFunction Create= NULL; 
  3. if( lib.Load ( _L("DllTry.dll") , _L("c:\\") ) != KErrNone) 
  4.   User::Exit( 40 ); 
  5.  
  6. Create=lib.Lookup ( 1 ); 
  7. Create(); 

 

posted on 2010-09-24 20:07  zelda  阅读(344)  评论(0编辑  收藏  举报

导航