symbian资源的自定义和解析

在系统的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值