日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Symbian 资源文件解析

發布時間:2023/12/31 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Symbian 资源文件解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、何為資源文件:<?XML:NAMESPACE PREFIX = O />

symbian應用程序中,資源文件指的是后綴名為.rss的文件,每個應用程序至少要有一個與之關聯的資源文件。資源編譯器rcomp編譯資源文件后,生成一個.rsc二進制文件和一個相伴的頭文件(.rsg)。這樣在應用程序框架啟動應用程序時,會打開這個二進制文件,借助在.rsg文件中創建的資源標志符,根據需要把各個資源加載到C++代碼中。

?

二、資源文件的作用:

在資源文件中指定用戶界面的布局,如常用組件菜單、對話框、列表等在界面上的排列樣式,另外還可以在其中指定界面上用戶可見的文本信息。當然,這些可見文本并不一定通過字符串在.rss資源文件中定義,我們一般在.loc本地文件中定義,而只需在.rss資源文件中將.loc本地文件引入(include)即可。(剛開始我百思不得其解,真不知道程序終相關的字符串定義在哪里的)

?

三、資源文件的結構(語法):

資源文件的具體結構由兩部分構成,分別稱為頭部和主體。

1、頭部:主要包括五部分,分別是文件名字、include包含語句、簽名、文檔名緩沖、應用程序信息資源這些些資源文件標準信息。

1)名字:用NAME語句定義,該語句必須是資源文件中第一個有意義的行(注釋和空白語句不在有意義行定義內),即這條語句要位于include包含語句之前,后面沒有分號。該語句指定一個由14個字符組成的名字,并建議使用大寫字符。如果應用程序使用了多個資源文件的話,那么可以通過它進行區分。如:NAME HELL

2include包含語句:允許使用其他地方定義的符號和結構。常見的有uikon.rheikon.rh、avkon.rh

3)簽名:它的內容實際上被忽略,但必須有這條語句,否則加載資源時便報錯。一般將實際內容置為空,如:RESOURCE RSS_SIGNATURE { } ,后面沒有分號。

4)文檔名緩沖:指定應用程序默認文檔名的TBUF資源。大部分程序不使用文檔,但仍然必須包含此資源,否則加載資源失敗。不需指定文件的擴展名,因為S60本地文檔不使用擴展名。如:RESOURCE TBUF { buffer=”HelloWorld”;}

在這里的文件名將作為參數傳遞給CAknDocument類的OpenFileL(TBool aDoOpen, const TDesC& aFilename, RFs& aFs)方法。這允許一個應用程序在運行時打開一個默認的文檔。如果這里的值為空那么程序默認文檔名和應用程序名一致。

5)應用程序信息資源:這個資源比較重要。EIK_APP_INFO資源為應用程序指定各種標準控件。如狀態面板等,通常會創建一個為狀態面板指定新內容的資源,然后使用EIK_APP_INFO資源的status_pane字段引用它。如:

RESOURCE EIK_APP_INFO

{

??????? hotkeys = r_HelloWorld_hotkeys;

????????menubar = r_HelloWorld_menubar;

????????cba = R_AVKON_SOFTKEYS_OPTIONS_BACK;

?}

注意:頭部中定義的各種資源都沒有資源名。

?

2、主體

主體部分主要定義了應用程序中將要使用的各種資源。

它的一般定義格式如下:

RESOURCE STRUCTNAME resource-name

{

??? resource-initializer-list

}

在這里STRUCTNAME應替換為具體的資源結構類型,而這些資源結構類型已在文件頭部include包含的eikon.rh、uikon.rh、avkon.rh中進行了定義。

資源名resource-name必須小寫,通常以r_開頭,而在C++文件中使用他們時必須大寫,這和資源編譯器工作方式有關。例如:

//資源名定義

RESOURCE AVKON_VIEW r_viewmychannelhot

{

??? hotkeys=r_xv_hotkeys;

??? menubar=r_menubar_viewmychannelhot;

??? cba=R_AVKON_SOFTKEYS_SELECTION_LIST;

}

//資源調用

BaseConstructL(R_VIEWMYCHANNELHOT);

下面具體研究resource-initializer-list(初始化資源字段),根據要資源字段的不同類型,初始化字段有三種不同方式:簡單初始化器、數組初始化器、結構初始化器。如下:

RESOURCE STRUCT r_my_example_struct

{

??? simple=EeikCtLabel;? //簡單初始化器,分配單個值或字符串

??? array={1,2,3};???????????? //數組初始化器,大括號,元素用逗號隔開

??? structmember=OTHERSTRUCT?? //結構初始化器,編譯器不進行類型檢查,要小心

{

???? simple1=”hello”;

???? simple2=”goodbye”;

}

}

由以上示例可知:

簡單初始化器:為字段分配單個值或字符串;

數組初始化器:為數組字段分配單個或多個值,格式用大括號括起,其中元素用逗號隔開;

結構初始化器:為結構字段分配單個或多個值。首先初始化時需要提供結構名,而后指定結構每個字段;其次資源編譯器不進行類型檢查,所哦一設定值時必須與結構字段相應類型一致,否則編譯能通過但是運行會出錯。

?

由于采用不同的控件時,其采用的資源字段各不相同,所以先分析三類具體的資源定義,具體控件的資源定義,放在具體控件中闡述。

1)字符串資源:

可以使用TBUF資源將字符串包含在資源文件中。通常,會在一個.loc文件中或是在指定語言的.lxx文件中定義字符串文字,而不是在.rss文件中定義它們,只需在.rss文件中將.loc文件包含進來即可。

.lxx文件中的xx應該替換為e32std.h中的Tlanguage枚舉定義的兩位數字區域設置碼,之后按照.mmp項目文件中設置的當前生成區域設置把.lxx文件包含到.loc文件中??匆粋€定義了.lxx文件的.loc文件實例:

#ifdef LANGUAGE_01

#i nclude “MyApp<?XML:NAMESPACE PREFIX = ST1 />.101”

#endif

#ifdef LANGUAGE_02

#i nclude “MyApp.l02”

#endif

最后,.101.102文件以各自的語言定義字符串,比如:

#define? STR_HELL0?? “Hello World”

為了確保編譯資源時將使用正確的字符串,應該在.mmp文件中包含一行或多行LANG語句,導致生成兩個二進制資源文件:.r01.r02

LANG 01

LANG 02

2)標點:介紹如何使用標點符號

a、所有賦值語句之后都應該有分號

b、列表中的元素以逗號分隔

c、資源定義后以及列表中最后一個元素之后不應有分號

舉例:

RESOURCE AVKON_VIEW r_myapp_view

{

??? menubar=r_myapp_menubar;//賦值語句后有分號

??? cba=r_myapp_cba;//賦值,需要分號

}? //資源定義結尾,無需分號

RESOURCE TAB_GROUP r_myapp_tabgroup

{

??? tab_width=EaknTabWidthWithTwoTabs;

????active = 0;

????tabs =

??????? {

????????????TAB?? //列表中的第一個TAB STRUCT

??????????? {

????????????? ? id = EnavigationPaneTab1;

????????? ????? txt = TAB1_TEXT;

???????????? },?? //列表元素之間用逗號分隔

????????? ??TAB

???????????? {

???????????????? id = EnavigationPaneTab2;

????????? ???????txt = TAB2_TEXT;

????????????? }?? //列表結尾無需分號

????????? };?????? //將列表賦值給tabs,需要分號。

}

3)創建資源結構:

RESOURCE語句用于創建特定資源的實例,而STRUCT語句則用于定義資源類型,創建的所有STRUCT定義都應該保存在一個擴展名為.rh的文件中。(從這里顯然我們可以試著去打開eikon.rh、uikon.rh、avkon.rh文件看看,里面是否都是STRUCT打頭的資源類型定義)

常用STRUCT字段類型見資源文件STRUCT字段類型表。,除簡單字段外,還可以把字段定義為一個由相同類型的值組成的數組,在字段名后添加一對方括號即可。如:

STRUCT MENU_PANE

{

?????? STRUCT items[ ];

?????? LLINK extension=0;

}

?

常用資源字段類型

字段類型

說明

BYTE

單字節,解釋為一個有符號或無符號整數

WORD

雙字節,解釋為一個有符號或無符號整數

LONG

四字節,解釋為一個有符號或無符號整數

DOUBLE

八字節,表示一個雙精度浮點數

TEXT

NULL結尾的字符串,已廢棄,建議使用LTEXT

LTEXT

Unicode字符串,帶有一個前導字節保存長度,沒有終止NULL

BUF

Unicode字符串,沒有前導字節,沒有終止NULL

BUF8

8位字符組成的字符串,沒前導和終止,用于放入8位數據

BUF<n>

最大長度為nUnicode字符串,沒有前導和終止

LINK

另一個資源的16ID,類似于擁有指定資源的一個引用

LLINK

另一個資源的32ID

SRLINK

自引用LINK,該類型字段值由資源編譯器自動分配,不能自行提供初始化值,是一個32ID

STRUCT

結構,創建本身就是STRUCT的字段,使用它可以把STRUCT嵌入到STRUCT

STRUCT的類型名字必須都大寫,不能含有空格,且以字母字符開始;在具體每個字段的定義時,依次由字段類型、字段名、可選初始值和一個分號組成。類型必須全部大寫,字段名必須小寫,如果提供默認值,則在資源定義中使用此類型資源結構是可以省略該字段,此時將使用默認值。

?

三、與資源文件有關的系統頭文件及其他文件:

如上提到的與資源文件相關的*.rh、*.loc*.*.rsg之外,在資源文件中,往往還會引入其它諸如*.hrh*.mbg文件,由于這是本人第一篇關于Symbian的小結,所以在這里借資源文件的解析順帶將其它文件也小結一下:

*.h*.cpp是最基礎的C++頭文件和C++源文件(這個不用做介紹都知道);

*.rssSymbian的資源源文件,主要定義資源實例,具體定義了應用程序UI所需所有字符串、按鍵、菜單和列表等等控件資源,在Series 60以后,將字符串的具體定義放在了*.loc文件中,更有益于UI本地化和國際化,另據文檔說明,*.rss可以擴展為*.r??用于多國語言版本;

*.rhSymbian的資源頭文件,負責資源結構類型的定義,除了預處理語句外就是STRUCT語句,它只能被資源源文件包含;

*.hrh是可以被C++文件(包括頭文件和源文件)和Symbian資源文件(包括*.rss*.rh)包含的頭文件,其內基本是預處理語句和enum枚舉語句,這些枚舉語句往往是菜單、工具條等的命令索引值,在switchcase語句中使用;

*.rsc文件是*.rss文件編譯生成的資源(二進制)文件,在資源源文件編譯過程中還會產生*.rsg文件,該文件內是*.rss資源源文件中資源的ID值,C++源文件包含它后可以通過資源ID直接裝載資源。

與資源相關的還有*.mbg文件,它和*.rsg一樣是編譯生成的ID文件,具體實現通常在*.mmp(后面介紹)文件中將各種Window bmp位圖包含進來,通過編譯生成*.mbm的過程中產生(該過程可能調用了aifbuilder這一圖標設計工具)。而*.mbmSymbian系統的圖像文件。在這里只要對照rsc文件的過程就行,只不過mbmUI的圖形和圖像資源。(這里至于換膚和aifbuilder的一些東西,我還不是很清楚,為此沒做展開)

*.inl文件是內聯函數的源文件,通常內聯函數在C++頭文件中實現,但有時為了考慮將其實現與頭文件分離,故意在另一文件中實現,通常它在聲明內聯函數的頭文件的末尾被#include語句包含進來。

*.pan文件是為應用程序創建一份應急代碼,字面意思應急代碼在開發過程中顯示程序的錯誤用的,但是具體我也沒有用到過,所以也不知道如何解釋更好些。

*.aif的文件,查到說是Symbian系統的應用程序信息文件,Aif文件的主要作用是在目標設備的菜單中顯示圖標由專門的aiftool應用程序產生,也跟本地化有關。

?

構建文件*.mmp是為控制臺應用程序abld準備的項目定義文件,其功能類似makefile,但是它可能比makefile還復雜,因為Symbian構建工具在mmp文件基礎上才能產生makefile文件,具體項目定義文件的格式后面再另作解析。

構建文件bld.inf是構建時的信息文件,通常其內只有一個*.mmp用于指向要編譯的項目定義文件,但是也可以包含多個*.mmp,具體多個時我試過,只要路徑設置正確就可以實現。

根據不同的構建目的,執行abld命令將產生各種不同的目標文件,具體由:*.appSymbian的系統執行文件相當于Windowsexe文件,它是多態的DLL)、*.dll(共享的dll文件)、*.exeSymbian系統服務或可執行文件,我將其理解為控制臺程序,不知道是否正確,該文件在Window上裝有模擬器情況下可以自動運行模擬器)。

打包文件*.pkg文件,該文件是為控制臺應用程序makesis準備用來生成*.sis手機安裝文件的的定義文件,其語法比較簡單,在這里不做展開。

?

既然對文件已經做了如上分析,那么順其自然對常見的文件目錄也用下表列出做下簡單描述

文件夾

內容描述

\aif

存放*.aif*.aif的源位圖(*.bmp

\data

用于產生*.src*.rss資源源文件

\group

與平臺無關的項目文件如*.mmp、*.inf有時也放*.rss

\inc

*.h、*.loc*.l**、*.pan、*.hrh等能被#include””包含的文件

\install

*.pkg和隨后生成的安裝文件*.sis

\src

*.cpp類的C++源文件

轉載于:https://blog.51cto.com/juwen/115832

總結

以上是生活随笔為你收集整理的Symbian 资源文件解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。