×
Namespaces

Variants
Actions

编写同时适合2版和3版的源代码

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

兼容于
平台:
Symbian

文章
r60600 在 31 Dec 2007 创建
最后由 hamishwillee 在 15 Aug 2013 编辑

众所周知,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>
#endif
EXPORT_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版的源代码。

This page was last modified on 15 August 2013, at 14:37.
41 page views in the last 30 days.
×