在系统的CCoeEnv里面有个AllocReadResourceAsDes16LC这个函数可以把资源文件读取到数组里,做的上一个项目里面有很多字符串常量数组,我就想可不可以自己定义资源,然后读取呢,网上找个破资料还真不好找,今天有点空闲时间,测试了一下,可以实现自定义并读取,记录一下。
先写一下资源定义的数据类型
字段类型
说明
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 中
用这些类型定义自己的自定义资源。
可以自己去系统的rh文件里面看看,操作系统定义的一些资源,分析分析
下面是我在rss里写的资源
STRUCT DATA
{
WORD wrd;
LONG lng;
LTEXT ltxt;// variable length
BYTE byt;
DOUBLE dbl;
}
STRUCT DATAARRAY
{
STRUCT dataelement[];
}
STRUCT MYCUSTOM
{
WORD wrd;
LONG lng;
LLINK datas;
}
//
//-----
RESOURCE DATAARRAY r_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;
}
};
}
RESOURCE MYCUSTOM r_mycustom_data
{
wrd = 10;
lng = 1000;
datas = r_data_array;
}
在cpp里面读取以上自己写的资源
HBufC8* resource = CCoeEnv::Static()->AllocReadResourceAsDes8LC(R_MYCUSTOM_DATA);
TResourceReader reader;
reader.SetBuffer(resource);
TInt a = reader.ReadInt16();
TInt b = reader.ReadInt32();
TInt res = reader.ReadInt32();
HBufC8* res1 = CCoeEnv::Static()->AllocReadResourceAsDes8LC(res);//转到LLINK的资源地址
reader.SetBuffer(res1);
TInt count = reader.ReadInt16();//数组用前两个字节来标识数组长度
for (TInt i=0;i<count;i++)
{
TInt wrd = reader.ReadInt16();
TInt lng = reader.ReadInt32();
TPtrC ptr = reader.ReadTPtrC();
TInt bte = reader.ReadUint8();
TReal dbl = reader.ReadReal64();
}
CleanupStack::PopAndDestroy(2);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shuicg/archive/2010/04/30/5547016.aspx