本文和大家重点学习一下Symbian开发中Symbian资源的自定义和解析,Symbian开发有很多值得学习的地方,这里就和大家分享一下,相信通过本文的学习你对Symbian开发的概念一定会有明确的认识。
Symbian开发中Symbian资源的自定义和解析
在系统的CCoeEnv里面有个AllocReadResourceAsDes16LC这个函数可以把资源文件读取到数组里,做的上一个项目里面有很多字符串常量数组,我就想可不可以自己定义资源,然后读取呢,网上找个破资料还真不好找,今天有点空闲时间,测试了一下,可以实现自定义并读取,记录一下。
Symbian资源定义的数据类型
字段类型
BYTE
单字节,解释为一个有符号或无符号整数
WORD
双字节,解释为一个有符号或无符号整数
LONG
四字节,解释为一个有符号或无符号整数
DOUBLE
八字节,表示一个双精度浮点数
TEXT
以NULL结尾的字符串,已废弃,建议使用LTEXT
LTEXT
Unicode字符串,带有一个前导字节保存长度,没有终止NULL
BUF
Unicode字符串,没有前导字节,没有终止NULL
BUF8
8位字符组成的字符串,没前导和终止,用于放入8位数据
BUF<n>
最大长度为n的Unicode字符串,没有前导和终止
LINK
另一个资源的16位ID,类似于拥有指定资源的一个引用
LLINK
另一个资源的32位ID
SRLINK
自引用LINK,该类型字段值由资源编译器自动分配,不能自行提供初始化值,是一个32位ID
STRUCT
结构,创建本身就是STRUCT的字段,使用它可以把STRUCT嵌入到STRUCT中
◆Symbian开发用这些类型定义自己的自定义资源。可以自己去系统的rh文件里面看看,操作系统定义的一些资源,分析分析
下面是我在rss里写的资源
- STRUCTDATA
- {
- WORDwrd;
- LONGlng;
- LTEXTltxt;//variablelength
- BYTEbyt;
- DOUBLEdbl;
- }
- STRUCTDATAARRAY
- {
- STRUCTdataelement[];
- }
- STRUCTMYCUSTOM
- {
- WORDwrd;
- LONGlng;
- LLINKdatas;
- }
- //
- //-----
- RESOURCEDATAARRAYr_data_array
- {
- dataelement=
- {
- DATA
- {
- wrd=11;
- lng=22;
- ltxt="data1";
- byt=1;
- dbl=2.11;
- },
- DATA
- {
- wrd=33;
- lng=44;
- ltxt="data2";
- byt=2;
- dbl=3.11;
- },
- DATA
- {
- wrd=55;
- lng=66;
- ltxt="data3";
- byt=3;
- dbl=4.11;
- }
- };
- }
- RESOURCEMYCUSTOMr_mycustom_data
- {
- wrd=10;
- lng=1000;
- datas=r_data_array;
- }
在cpp里面读取以上自己写的资源
- HBufC8*resource=CCoeEnv::Static()->AllocReadResourceAsDes8LC(R_MYCUSTOM_DATA);
- TResourceReaderreader;
- reader.SetBuffer(resource);
- TInta=reader.ReadInt16();
- TIntb=reader.ReadInt32();
- TIntres=reader.ReadInt32();
- HBufC8*res1=CCoeEnv::Static()->AllocReadResourceAsDes8LC(res);//转到LLINK的资源地址
- reader.SetBuffer(res1);
- TIntcount=reader.ReadInt16();//数组用前两个字节来标识数组长度
- for(TInti=0;i<count;i++)
- {
- TIntwrd=reader.ReadInt16();
- TIntlng=reader.ReadInt32();
- TPtrCptr=reader.ReadTPtrC();
- TIntbte=reader.ReadUint8();
- TRealdbl=reader.ReadReal64();
- }
- CleanupStack::PopAndDestroy(2);