×
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.
128 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×