Symbian DLL 用法小结
2010-02-28 00:00:00 来源:WEB开发网Symbian 的DLL分为两种,一种是静态接口DLL(static interface dll),一种是多态接口DLL(polymorphic interface dll)。
(一)静态接口DLL(static interface dll):
静态接口DLL一般使用DLL结尾,提供固定的API,给其他程序调用。静态接口DLL在主调程序启动的时候被系统自动载入到手机内存里面(唯一的例外是如果该DLL是在ROM只读存储器里面,那么可以直接通过它的地址进行调用)。并且如果没有外部程序使用它了,它将被自动的从内存中卸载。
在Symbian OS编写dll时,要注意的问题是,不能有全局或静态变量存在,这个一定要注意,在SDK中讲得很清楚。
Symbian OS是基于ROM来处理程序的。DLL是通常是存储在ROM中的(运行也是在ROM中),所以它是不可写的。虽然有时把DLL装入RAM中运行,但 Symbian OS仍旧假定DLL不可写。因此Symbian OS中的DLL没有数据段(Data Segment ),这就导致了DLL中不能包含有可写的静态数据,不管其是否被初始化。
从DLL调用者的角度来看,DLL有三个文件组成:
(1)头文件:.h的文件后缀,可以#include到主调程序的代码中去,只有在编译的时候有用。
(2)导出文件:.lib的文件后缀,可以由主调程序进行链接,这个文件记载了DLL的提供的所有接口函数名称和地址。
(3)DLL文件本身:.dll的文件后缀包括所有.lib文件记载的接口函数的具体实现,主调函数在运行的时候实际调用和执行的部分。
从DLL编写者的角度来看,DLL可以被看成是一个完整的Symbian项目。 它由以下几部分组成:
(1)项目自己的MMP文件(在bld.inf文件中列出的)
(2)一个头文件,指定了该DLL需要导出的接口
(3)源代码文件,具体导出函数的实现
头文件
DLL的头文件与其它类的头文件的头文件非常类似。不同的地方在于
使用了IMPORT_C宏来定义所有导出函数:
class CMyEngine : public CBase
{
public:
// These functions are visibleby the
// clients of the DLL andneeds to have
// the IMPORT_C tag
IMPORT_C static CMyEngine*NewL();
IMPORT_C static CMyEngine*NewLC();
IMPORT_C voidMyPublicMethod();
IMPORT_C voidAnotherPublicMethod();
更多精彩
赞助商链接