如何编写同时兼容2版/3版的源代码

2010-03-17 | 分类: 塞班编程 | 编辑: admin | 44 次浏览 | 发表评论

众所周知,2版和3版有诸多不同,但它们的主体结构大体相同,所以如果为不同版本单独编写工程,自然会有很多代码是相同而造成冗余。那么如何编写同时适合2版和3版的工程呢?答案是:选择性编译,也就是在工程中利用选择性编译根据当前的编译环境编译不同平台的编码,当然不同文件中有不同的方法。

一.BLD和MMP等工程定义文件

例如bld.inf:

#ifdef EKA2 xxx30.mmp gnumakefile icons_aif_scalable_dc.mk #else xxx20.mmp #endif

可以依据编译环境选择不同的MMP或MK文件,当然工程文件夹中必须分别有2版和3版的两套工程定义文件;

再例如xxx.mmp:

#ifdef EKA2 TARGET MultiViews.exe TARGETTYPE exe #else TARGET MultiViews.app TARGETTYPE app #endif

就可以利用一个MMP文件定义两种平台的目标类型,以及各种资源、库文件、路径等配置。

注:EKA2(Epoc Kernel Architecture 2)表明操作系统的核心版本为3.0或以上。

二.CPP文件

2版和3版的程序入口和部分API不同,所以必须依据编译环境的不同加以区别。

例如程序入口(继承自CAknApplication的实例): #ifdef __SERIES60_30__#include <eikstart.h>#endifEXPORT_C CApaApplication* NewApplication()

{ return (static_cast<CApaApplication*>(new CxxxApplication));

}#ifdef __SERIES60_30__GLDEF_C TInt E32Main()

{ return EikStart::RunApplication( NewApplication );

}#else

GLDEF_C TInt E32Dll( TDllReason /*aReason*/ ) { return KErrNone; }

#endif

再例如字体API:

#ifdef __SERIES60_30__ const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontSecondaryFont ); #else const CFont* font = LatinBold12(); #endif

以上方法综合利用即可编写同时适合2版和3版的源代码。 (来自:Forum Nokia Wiki)

关键字:

发表评论

您的昵称 *

您的邮箱 *

您的网站

icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif 
返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 标签页 | 友情链接 | 版权声明
Top