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

本文介绍了一种在S60不同版本间进行选择性编译的方法,通过使用预处理指令在BLD和MMP文件中选择合适的配置,并在CPP文件中根据不同版本调整程序入口和API调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

From Forum Nokia Wiki

众所周知,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版的源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值