×
Namespaces

Variants
Actions

使用RLibrary加载DLL

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
hoolee 在 20 Jun 2008 创建
最后由 hamishwillee 在 15 Dec 2011 编辑

CS001009


  • 开发伙伴平台:

S60 3rd Edition, MR


  • 详细描述

下列代码片段演示了如何动态加载一个多态的DLL。对静态DLL来说,程序在启动时自动加载到RAM中。也可以在任何不需要的时候自动卸载。一个多态的DLL可以通过调用RLibrary::Load()加载,以及通过RLibrary::Close()卸载。多个多态DLL显示给客户端的可以是同样的接口。这种DLL一般由提供插件特性的框架来使用。


MMP文件

需要下列链接库和能力:

CAPABILITY      None
LIBRARY euser.lib


多态DLL

  • DLL的MMP文件中的UID2不能为0x1000008d(该UID2用于共享DLL),具体取值可以根据多态DLL的类型而定(如套接字服务器协议模块的UID2值为0x1000004A)
  • DLL所拥有的能力必须等于或大于加载它的程序。当加载时,DLL运行在加载进程的能力级。因此这个DLL必须要有所有能执行它的程序的能力,即使对另外一部分程序里面的代码并不需要用到其中的这种能力
  • DLL必须完成定义的虚接口类
  • DLL必须要有一个EXPORTED静态函数,其返回一个该接口类的示例


DLL的头文件应为:

class MMyDll
{
public:
virtual TInt Data() = 0;
};
 
class CMyDll : public MMyDll
{
public:
IMPORT_C static MMyDll* NewL();
virtual TInt Data();
};

DLL源文件:

EXPORT_C MMyDll* CMyDll::NewL()
{
return new CMyDll();
}
 
TInt CMyDll::Data()
{
return 1;
}

动态加载DLL

#include <e32std.h>
 
RLibrary library;
 
// Load dll
User::LeaveIfError(library.Load(_L("CMyDll")));
 
// Find exported function
TLibraryFunction NewL=library.Lookup(1);
MMyDll* mydll=(MMyDll*) NewL();
 
// Close the library
library.Close();
 
TInt value = mydll->Data();
delete mydll;
This page was last modified on 15 December 2011, at 09:48.
58 page views in the last 30 days.