Symbian開發(fā)中Symbian資源的自定義和解析
本文和大家重點(diǎn)學(xué)習(xí)一下Symbian開發(fā)中Symbian資源的自定義和解析,Symbian開發(fā)有很多值得學(xué)習(xí)的地方,這里就和大家分享一下,相信通過本文的學(xué)習(xí)你對(duì)Symbian開發(fā)的概念一定會(huì)有明確的認(rèn)識(shí)。
Symbian開發(fā)中Symbian資源的自定義和解析
在系統(tǒng)的CCoeEnv里面有個(gè)AllocReadResourceAsDes16LC這個(gè)函數(shù)可以把資源文件讀取到數(shù)組里,做的上一個(gè)項(xiàng)目里面有很多字符串常量數(shù)組,我就想可不可以自己定義資源,然后讀取呢,網(wǎng)上找個(gè)破資料還真不好找,今天有點(diǎn)空閑時(shí)間,測(cè)試了一下,可以實(shí)現(xiàn)自定義并讀取,記錄一下。
Symbian資源定義的數(shù)據(jù)類型
字段類型
BYTE
單字節(jié),解釋為一個(gè)有符號(hào)或無符號(hào)整數(shù)
WORD
雙字節(jié),解釋為一個(gè)有符號(hào)或無符號(hào)整數(shù)
LONG
四字節(jié),解釋為一個(gè)有符號(hào)或無符號(hào)整數(shù)
DOUBLE
八字節(jié),表示一個(gè)雙精度浮點(diǎn)數(shù)
TEXT
以NULL結(jié)尾的字符串,已廢棄,建議使用LTEXT
LTEXT
Unicode字符串,帶有一個(gè)前導(dǎo)字節(jié)保存長(zhǎng)度,沒有終止NULL
BUF
Unicode字符串,沒有前導(dǎo)字節(jié),沒有終止NULL
BUF8
8位字符組成的字符串,沒前導(dǎo)和終止,用于放入8位數(shù)據(jù)
BUF<n>
最大長(zhǎng)度為n的Unicode字符串,沒有前導(dǎo)和終止
LINK
另一個(gè)資源的16位ID,類似于擁有指定資源的一個(gè)引用
LLINK
另一個(gè)資源的32位ID
SRLINK
自引用LINK,該類型字段值由資源編譯器自動(dòng)分配,不能自行提供初始化值,是一個(gè)32位ID
STRUCT
結(jié)構(gòu),創(chuàng)建本身就是STRUCT的字段,使用它可以把STRUCT嵌入到STRUCT中
◆Symbian開發(fā)用這些類型定義自己的自定義資源。可以自己去系統(tǒng)的rh文件里面看看,操作系統(tǒng)定義的一些資源,分析分析
下面是我在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);//轉(zhuǎn)到LLINK的資源地址
- reader.SetBuffer(res1);
- TIntcount=reader.ReadInt16();//數(shù)組用前兩個(gè)字節(jié)來標(biāo)識(shí)數(shù)組長(zhǎng)度
- for(TInti=0;i<count;i++)
- {
- TIntwrd=reader.ReadInt16();
- TIntlng=reader.ReadInt32();
- TPtrCptr=reader.ReadTPtrC();
- TIntbte=reader.ReadUint8();
- TRealdbl=reader.ReadReal64();
- }
- CleanupStack::PopAndDestroy(2);