Monthly Archive for June, 2006

我写的第一个Symbian OS C++程序 - TicTacToe

为了学习Symbian,练练手,参考了S60 SDK里的那个NAC的例子,算法是从JDK的示例代码中那个TicTacToe的Applet移植过来的。

开发环境: S60_2nd_FP3 + Carbide. c++ Express 1.0

在Nokia N70上测试过。

模拟器截屏:

mydemo.jpg TicTacToe_menu.jpg

Carbide.c++ Express中如何编译多语言资源文件

Carbide.c++ Express是Nokia推出的用于开发Symbian C++程序的免费IDE,基于Eclipse,目前版本是1.0。由于我是新手,加上以前用Eclipse开发Java程序,所以一下子就选择了用Carbide.c++(还有一个重要的原因是我从来就不喜欢MS的东西,不想用VS)。

最近一直在学习Symbian C++编程,写了一个简单的TicTacToe游戏。想在里面加上Localization的功能,于是参照NewLC上的这篇文章和S60 SDK的文档准备了资源文件。

loc资源文件的内容是这样的:

// TicTacToe.loc
// Localisation for TicTacToe

#if defined LANGUAGE_01 | LANGUAGE_SC
#include "TicTacToe.l01"
#elif defined LANGUAGE_31
#include "TicTacToe.l31"
#endif

// End of File

可见,英文和中文的资源文件分别是 TicTacToe.l01和TicTacToe.l31。只要编译资源文件时指定不同的标志就可以生成两种语言的资源文件。

Carbide C++不支持mmp文件(只能Import),只能在项目的Build Configuration里设置,如下图:

localization.jpg

这样设置以后,并不能把两种语言的资源文件都生成出来。查看了Carbide.c++ Express的Release Note就会知道,它目前一次只能编译一种语言的资源文件,原文如下:

Can only build resources for one language - LANGUAGE_sc by default Change the language macro in the Resource Compiler project preference. You can only build for one language at a time.

解决办法是先编译英文的资源文件, 然后手工拷贝成TicTacToe.r01;再编译中文的,拷贝成TicTacToe.r31。这样pkg文件里就可以使用它们了。

我不想每次都手工的去拷贝文件,就写了一个Python脚本epocrc.py,自动地根据设置的语言标志调用epocrc.pl去编译资源文件。需要改一下Build Configuration的设置,把原来的perl -S epocrc.pl改成epocrc.py,如下图:

epocrc-py.jpg