首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian入门 >> 正文
Symbian系统中DLL的冻结
作者:Leo 译    文章来源:newlc    更新时间:2007-5-17 15:58:31
给大家一个很好的建议,那就是在Symbian程序开发中保持主引擎和GUI分离。最简单的方法是适用静态DLL代替ECOM插件,这个时候开发者会遇到这样的问题:为什么要冻结DLL 呢?

我们在SDK和网上都可以找到很多资源,但是到处都没有能找到我们为什么要这样做。

1. 需要冻结
好的DLL需要在发布之前冻结他们的输出,以致确保和新版本库的向后兼容性。必须确保现有版本的库和以后版本库的DLL的函数顺序一直,甚至包括新函数的添加。这个描叙就是冻结的目的。但是当冻结时发生什么呢?他是必须的吗?

2. 冻结的原因
在搜索解决方案的时候我发现,问题被定位到PETRAN,PETRAN工具可以为ARM对象去掉可执行文件的相关组件信息,因此使用DLL会小得多因此ARM对象仅仅支持顺序的链接。

3. 冻结过程
当DLL被构建每个输出的函数被分配一个唯一的整数值作为他的顺序。DLL函数在运行时通过使用他的顺序值被调用。举个例子,可以认为是某一个特定情节。

设想我们开发一个DLL,它将作为第三方的接口发布某些功能,我们发布一个DLL和相应的输出库。现在开发者使他们的程序与输出库链接,然后DLL不在与我们使用的DLL兼容,因此输出库需要使用链接前的顺序。

输出库和DLL顺序值必须得匹配,如果应用程序链接到老的输出库,调用一些输出函数那么错误的功能将被调用。无论什么函数,现在必须得按照顺序来调用。

看下面的例子,列举了Somedll.dll的函数:

现在上面的输出函数的顺序可能看起来像这样:

QUOTE:
SomedllFunction1 – 1
SomedllFunction2 - 2

随后我们伴随相应的库发布这个DLL,在定义中匹配的是内联函数。

在客户端程序调用输出库的SomedllFunction2 时,它将通过函数顺序号2来调用DLL中相应的SomedllFunction2()函数。

现在如果DLL发生变化,可能会使SomedllFunction()函数得到一个新的顺序号。而应用程序使用的是老的DLL输出库可能不能正常工作。

为了使开发简单,必须保证界面DLL的兼容性。
相关文章:
遍历文件夹
如何在进程间共享文件句柄
MMI of UIQ (三)
如何改变CEikLabel的颜色
创建Log文件调试Symbian程序
CCoeControl类中Draw()函数的调试
Symbian程序中的观察者模式
S60平台:Bluetooth API开发伙伴指南——服务搜索
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号