2006年02月14日

    在寻找解决办法的过程中,在Nokia论坛里找到了一段代码,该用户说具体使用的时候,发现没有反应,经过修改,我得到下面的代码,经测试是可以使用的,各部分的具体意思可以在SDK中查找。

    RWsSession sess=CEikonEnv::Static()->WsSession();
    TWsEvent event;
    event.SetType(EEventKey);
    event.SetTimeNow();
    event.Key()->iCode = EKeyCBA2;
    event.Key()->iModifiers = 0;
    event.Key()->iRepeats = 0;
    event.Key()->iScanCode = 0;
    sess.SendEventToWindowGroup(sess.GetFocusWindowGroup(),event);

    需要注意的是,在S60中,Symbian的键被重新定义了,因此上面的EKeyCBA2实际上是EKeyDevice1。对于UIQ,我想,也会有这样的问题,因此在发送所需的键消息的时候应该注意这一点。如果使用了错误的键值,程序看起来将可能没有什么反应。下面是从S60头文件中复制的代码,从中可以看到这种对应关系。

#define EKeyOK   EKeyDevice3
#define EKeyCBA1  EKeyDevice0
#define EKeyCBA2  EKeyDevice1
#define EKeyPhoneSend EKeyYes
#define EKeyPhoneEnd EKeyNo
#define EKeyApplication EKeyApplication0
#define EKeyPowerOff EKeyDevice2
#define EKeyGripOpen EKeyDevice4
#define EKeyGripClose EKeyDevice5
#define EKeySide  EKeyDevice6

2005年10月17日

    在调试使用Socket进行数据通讯的Symbian S60程序过程中,需要编写客户端与服务器的数据交互代码,如果S60的模拟器可以直接访问网络中的服务器程序,调试就会非常方便。S60的模拟器提供了这些功能,不过需要对网络参数进行一些设置,下面将讨论这一问题。
    首先是网络参数的设置,在Symbian安装目录的..\Epoc32\tools目录下有一个网络参数设置程序network_config.bat,对于不同的开发包,这个名字可能会有一些不同。执行该程序,将显示参数设置界面。其实参数的设置和对局域网中的PC设置一样,你就把它当成是在设置PC的网络配置就可以了。分配一个没有使用的IP,填写好子网掩码,设置好局域网的网关。唯一的不同是要选择所使用的网卡。当你点OK关闭该设置对话框的时候(或着点那个Adapters按钮),会显示一个命令行界面,列出了当前机器上可以使用的网卡的信息,你需要输入一个数字选择一个网卡,注意,应该选择你的PC所使用的那个真实的网卡,也就是标识你机器在局域网内IP地址的那个网卡。
    按照官方文档来说,这样就可以,但实际上不是所有的机器都可以,我没有测试过,不知道别人的机器如何,反正我使用的机器不可以。后来我在一本书里看到,还需要运行另外一个程序,才可以达到我们的目的。这个程序与上面的设置程序在同一个目录下,叫做npacketadmin.exe。执行它,会显示一个程序,并跳出一个设置对话框,首先在下拉列表框里选择你刚才选定的那个网卡,然后点击下面的Start按钮,这样就可以了。这时你就可以使用模拟器调试你的Symbian S60通讯程序了。
    测试是否连通的方法是,执行模拟器中的“网络”应用程序,然后输入一个网址,比如
www.sina.com.cn,如果设置正确,将显示该页面,注意也许是乱码,不过不要紧,因为我们只想知道网络是否已经可用了。
    需要注意的几个问题:
    1.在调试期间可以关闭npacketadmin.exe的那个设置对话框,但是不能关闭该程序。如果关闭了,网络将不通。
    2.如果不小心关闭了该程序,需要重新启动,并重新做上面的第二步的操作。
    3.应该在启动模拟器之前就启动该程序,不然模拟器可能会异常退出。
    最后应该感谢那本书的作者,是他让我们了解这个知识,那本书的名字我没有记住,是国内人编写的,不是太厚,但是我觉得很实用,适合有一定S60基础的开发人员来使用,推荐大家去书店购买。

2005年07月19日

    一个典型的S60 Symbian程序主要由以下几个类组成:

    CAknApplication的派生类
    代表着程序,有两个成员函数很重要,是AppDllUid和CreateDocumentL。
    CAknDocument的派生类
    代表着程序的数据部分,有一个比较重要的成员函数是CreateAppUiL。
    CAknViewAppUi的派生类
    代表着程序的界面框架。
    CAknView的派生类
    代表着程序的视图。

    这些类组成了程序的基本框架。

    在运行的时候,执行的顺序是这样的:
    因为Symbian程序实际上是一个DLL(当然,与Windows的DLL是不同的),因此首先调用入口函数E32Dll,这个函数实际上什么都不做,只是立即返回一个值。然后将调用DLL的另外一个函数NewApplication,这个函数创建并返回CAknApplication的派生类指针。下一步会调用CAknApplication的派生类的CreateDocumentL函数,获得CAknDocument的指针。该类中有一个函数叫做CreateAppUiL,它创建CAknViewAppUi类。而视图类则是由该UI类在构造函数中创建的。这基本上是一个S60 Symbian程序的启动过程。

2005年07月06日

概述

       mmp项目定义文件使用与平台和编译器无关的方法规定了项目的属性。makmake工具把项目定义文件转换成专门平台的makefilesabld工具封装了对makmake的调用,比makmake使用的更广泛。实际上,在一般的使用过程中,你基本上只使用abld,不会用到makmake

       项目定义文件的扩展名是.mmp

       注意:

l         每个语句都占用一行。

l         使用C++风格的注释语法

l         最后的反斜杠被解释成延续标志,表示下一行与本行是一条语句。因此,指定目录的时候,不要写后面的反斜杠。例如,应该写 SYSTEMINCLUDE \epoc32\include而不是SYSTEMCLUDE \epoc32\include\

 

例子

       一个例子文件,文件的名字是hello.mmp

 

TARGET HelloWorld.app

TARGETTYPE app

UID 0×100039CE 0×10004299

TARGETPATH \system\apps\HelloWorld

SOURCEPATH .

SOURCE HelloWorld_Main.cpp

SOURCE HelloWorld_Application.cpp

SOURCE HelloWorld_Document.cpp

SOURCE HelloWorld_AppUi.cpp

SOURCE HelloWorld_AppView.cpp

USERINCLUDE .

SYSTEMINCLUDE \epoc32\include

RESOURCE HelloWorld.rss

LIBRARY euser.lib apparc.lib cone.lib eikcore.lib

 

常用语句摘要

 

aif

程序信息文件

document

文档文件(非代码文件)

library

导入库

resource

程序项目的资源文件

source

源文件

sourcepath

源文件和项目的位置

systeminclude

系统头文件目录

target

项目生成的文件名字

targettype

项目的类型

targetpath

生成的文件放置的位置

uid

项目的UID

userinclude

项目头文件目录

下面是一个Symbian S60程序的典型开发过程

1.使用模拟器和开发工具在PC上编写程序的代码,并调试。
2.调试完成以后,使用SDK提供的编译器将源代码编译成目标机器文件。
3.使用打包工具,将目标机器文件制作成安装文件(SIS文件)。
4.将安装文件传送到目标机器中,并进行安装。
5.在手机上测试最终的程序,并根据测试结果,检查源代码。
6.需要修改时,重复以上的步骤。

文章所属分类Symbian

2005年06月21日

选择目标机型,相应的平台以及开发工具

    首先必须选择应用所需的机型,不同的机型支持的Symbian平台会不一样,所以确定机型是最先要做的事情。

    机型确定以后,所使用的Symbian系统版本,以及界面平台就确定了。界面现在主要有UIQS60等平台。在这里选用的是S60

    我的建议是,选择S60 SDK2.1中文版,这个版本所对应的Symbian系统是7.0s,差不多后期的智能手机都比这个高,根据兼容性,在这个平台上开发的程序,只要没有使用一些特殊的功能,在后继平台上都应该可以使用。而中文版,则可以省去处理中文的麻烦,同时模拟器也是中文的界面。

    可以选择不同的开发工具,包括VC6.NetCodeWarrior等等。开发工具不同,在选择SDK开发包的时候,也要选择不同的版本,因为SDK并不支持所有的工具。这里选择的是VC6,所以要选择S60 SDK中文版支持VC6的版本,这样才可以使用指定的工具开发。

下载相应的软件

      S60SDK,可以到www.series60.comhttp://forum.nokia.com 去下载。具体到S60 SDK2.1 FOR VC中文版,是在这个地址http://www.forum.nokia.com/main/0,,034-4,00.html 。在右侧有一个Download now按钮,在按钮上方的下拉框中选择“SDK for 2nd Edition, FP 1 – Chinese”,这就是SDK2.1中文版。

      SDK的运行需要javaActivePerl的运行环境。所以必须要去下载这两个安装程序。

      JREJava Runtime Environment)可以去这里下载www.java.com。具体的地址是http://www.java.com/zh_CN/download/manual.jsp ,然后选择那个Windows(脱机安装)版本。

      ActivePerl的官方站点是http://www.activeperl.com/。具体下载的地址是http://www.activeperl.com/Products/Download/Download.plex?id=ActivePerl 。我下载的是ActivePerl 5.6.1.638,使用的时候没有发现什么问题。

    有了SDK,也有了JREActivePerl Symbian S60的开发环境就可以建立起来了。安装完成后,不再需要做什么特殊的设置。

VC6安装向导

    使用VC6开发的话,一定要使用SDK中的向导模板。

    对于SDK2.1中文版来说,它的位置应该在Symbian\7.0s\Series60_v21_C\Series60Tools\appwizard中。向导模板就是EpocAppWizard.awx文件,而Readme.txt则说明了如何安装该向导,按照说明安装就可以使用了。这个向导将帮助你生成Symbian程序所需要的基本框架,虽然还不是太灵活和全面,但是能节省很多写重复代码的时间,因此强烈建议使用。

文章所属分类Symbian

2005年06月08日

    首先当然是Symbian的官方网站www.symbian.com,可惜只有英文的。像我这样英语等于是基本不会的人来说,就是非常痛苦。在这个站点中,有一点中文的东西,地址是这里www.symbian.com/technology/chinese/index.html,但是跟没有差不多:)。各位最好在这里下载操作系统相应版本的SDK文档,这个文档会比S60的SDK中所带的更全一些。

    接下来,就是S60的官方站点www.series60.com,幸运的是它有相应的中文站点www.series60.com.cn,虽然内容好些还是英文的,但起码相当一部分都已经翻译过了,也算是我们这些英语旱鸭子的福音。不过建议还是要经常看英文的站点,因为感觉中文的页面更新的没有英文的快。

    最后一个比较重要的,当然是Nokia的站点了,是这个forum.nokia.com.cn,这个也有中文,S60的大部分资料其实都来自这里。

    除了这几个官方站点,还有几个有关Symbian的站点,目前我还没有详细看过,所以也不好评论,这里先不介绍。其实,有了这几个官方站点,大多数问题,都已经可以解决了。

2005年06月07日

本文摘自www.series60.com.cn,介绍了S60平台的几个小问题。

什么是Series 60 Platform
Series 60 Platform是运行Series 60手机的软件。这些手机有时被称为智能手机。Series 60 Platform包括一个用户界面(Series 60 UI),用于让用户导航并与该手机中的数据和软件进行交互,它还包括一些程序(Series 60应用),它们向手机提供许多先进的功能,如消息和日历等。Series 60 Platform运行于一个开放式操作系统(Symbian OS)之上。除了现有的应用之外,用户还能安装其他一些有趣的应用。

什么是Series 60 Platfrom Editions
Series 60 Platform的各个发布版本被称为Editions,其中包括了该版本的全部特性。最新版本的Series 60发布版是Series 60 Platform 3rd Edition。Series 60 Platform 3rd Edition中包括了Series 60 Platform 2nd Edition的全部主要特性,同时增加了一些新特性。
什么是Feature Packs?
Feature Packs包括一些针对该Edition的附加特性。Feature Packs中还可以包括终端规范特性。如,Series 60 2nd Edition, Feature Pack 2就向Series 60终端引入了WCDMA技术。
2005年05月27日

以下列出扩展名所对应文件的用途:

rss 资源文件
rls 定义本地字符串,在资源文件中包含这种文件
h 头文件,包含在C++文件中
rh 资源头文件,包含在资源源文件中
hrh 通用头文件,可以包含在C++或资源源文件中。
rsg 资源编译器输出的资源头文件
rsc 资源编译器编译过的资源文件
aif 程序信息文件,程序体系结构定义的,是Aiftool程序的输出。

可以通过两种方法达到这个目的,一种是使用aif文件,这需要熟悉它的使用方法,在这里不专门叙述。另外一种是使用资源文件来达到同样的目的,这里会描述这个方法。

首先创建一个新的rss文件,该文件的名字必须是程序名字加_caption.rss。比如,程序的名字是HelloWorld,则它的名字应该是HelloWord_caption.rss。文件建立以后需要设置文件的内容,下面是一个例子:
NAME APPC

#include <apcaptionfile.rh>

RESOURCE CAPTION_DATA
    {
    caption=”caption text”;
    shortcaption=”short caption text”;
    }

NAME APPC,为资源文件起了一个名字,这是每个资源文件都必须有的,具体使用方法可以查看相应的SDK文档。

#include将CAPTION_DATA的结构包含到资源文件中,这样才可以在后面使用,熟悉C++的,对此应很容易理解。CAPTION_DATA是为了实现程序名称的设置而专门定义的资源结构。

RESOURCE CAPTION_DATA是资源文件的语法,具体的意义可以在SDK中查到。在这里只需要知道caption的值将显示在进入程序后的标题上,也就是程序的标题。而shortcaption的值将显示在启动界面中,作为启动程序的程序名。

写好这个文件之后,还不要忘记将该资源文件的名字加到mmp项目文件中,只有这样才能够在编译的时候起到作用。如果在IDE中编译没有效果,可以使用命令行的方式,这种方式虽然不够直观,但是是最有效的方式。