Symbian開發中Symbian資源的自定義和解析
本文和大家重點學習一下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);