开发伙伴平台:
S60 3rd Edition, MR
详细描述
下列代码片段演示了如何动态加载一个多态的DLL。对静态DLL来说,程序在启动时自动加载到RAM中。也可以在任何不需要的时候自动卸载。一个多态的 DLL可以通过调用RLibrary::Load()加载,以及通过RLibrary::Close()卸载。多个多态DLL显示给客户端的可以是同样的 接口。这种DLL一般由提供插件特性的框架来使用。
MMP文件
需要下列链接库和能力:
Code:
CAPABILITY None
LIBRARY euser.lib
多态DLL
* DLL的MMP文件中的UID2必须为0x1000008d
* DLL所拥有的能力必须等于或大于加载它的程序。当加载时,DLL运行在加载进程的能力级。因此这个DLL必须要有所有能执行它的程序的能力,及时里面的代码并不需要用到某种能力
* DLL必须完成定义的虚接口类
* DLL必须要有一个EXPORTED静态函数,其返回一个该接口类的示例
DLL的头文件应为:
Code:
class MMyDll
{
public:
virtual TInt Data() = 0;
};
class CMyDll : public MMyDll
{
public:
IMPORT_C static MMyDll* NewL();
virtual TInt Data();
};
DLL源文件:
Code:
EXPORT_C MMyDll* CMyDll::NewL()
{
return new CMyDll();
}
TInt CMyDll::Data()
{
return 1;
}
动态加载DLL
Code:
#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;