DLL on Symbian

来源:互联网 发布:詹姆斯历届总决赛数据 编辑:程序博客网 时间:2024/05/21 22:44

1.Compilation

1.1) 编译DLL将产生两个文件, .lib(or .dso)和.dll

.lib(.dso)用来描述函数在实现中名字和地址, 这是一个interface文件, 编译后放在目录/epoc32/release/target-platform/lib

.dll则是函数的实现. 编译后放在/epoc32/release/target-platform/udeb-urel/

 

在MMP中不需要指定目标lib文件, build tools chain会自动产生.

而在link时, 不需要指定目标dll文件, 因为函数的名字和地址都包含在了lib文件中.

 

1.2) Freeze export.

???

 

 

2. Link

有两种Link方式:

2.1) 静态链接, 称为Static Interface DLL. 使用方法非常简单:

2.1.a) 在src文件中把dll的接口头文件include进来,

2.1.b) 在MMP中把该dll对应的lib列出来.

Static Link方式在编译器link阶段就会把lib import进来, 但这只是地址, 不会增加二进制文件的size.

真正DLL实现加载是发生在EXE加载时, 由Loader完成.

 

2.2) 动态链接, 称为Polymorphic Interface DLL. 主要使用RLibary加载

???

 

 

3. Implementation

3.1) MMP中的定义

3.1.a) TARGETTYPE指定为DLL

3.1.b) UID2, 对于Static Interface DLL, UID2默认固定为0x1000008d, 而对于Polymorphic Interface DLL, UID2的值在于识别一个实现, 这个值定义在实现文件中.

3.1.c) UID3用来识别Static Interface DLL, 而对于Polymorphic Interface DLL, UID3用来识别不同的应用, 比如ECom Plugin.

<UID2> <UID3>似乎有误???

 

3.2) SRC中的定义

3.2.a) .cpp文件, 在要导出的函数前加关键字EXPORT_C

3.2.b) .h文件, 在要导出的函数前加关键字IMPORT_C