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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

详解HelloWorldBasic实例

發布時間:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解HelloWorldBasic实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載于:http://www.sm82.com/blog/article.asp?id=101
LeeFJ 翻譯整理

Detail Of HelloWorldBasic Example

About this example

HelloWorld 這個簡單的應用程序展示了在Symbian OS 60 上開發開發交互式應用程序的過程,雖然它很簡單僅顯示了“HelloWorld”這樣一個字符串,但是要知道,HelloWorld 是我們開發的起點。

Design and implementation

文 件描 述
HelloWorldBasic.cppDLL 的入口點

HelloWorldApplication.h
HelloWorldApplication.cpp

Application 的作用是初始化程序其他部分,所以這里它將首先創建一個空的 Document 對象。
HelloWorldDocument.h
HelloWorldDocument.cpp
Document 對象描述了用于構造 App UI 的數據。
HelloWorldAppUI.h
HelloWorldAppUI.cpp
App UI(Application User Interface) 用于處理菜單所產生的各種命令。例如事件處理、系統調用等。
HelloWorldAppView.h
HelloWorldAppView.cpp
這個類主要目的是在屏幕上顯示數據。
HelloWorldView.rss資源文件,用于描述菜單和字符串的來源。

Static structure

HellWorld 例子的類圖如下,這就是她的靜態結構:

Figure-1: Hello World Basic class diagram

這個類圖顯示了這些類是如何實現 HelloWorld 的,以及哪些文件實現了這些類。另外,從圖中還可以看到一個標準的應用程序所使用的類的繼承結構。這里其實還可以進一步了解一下在類圖中提到的每一個類的細節,了解他們的 API ,我想這對以后的開發是有幫助的。

這里需要插入一點,在Symbian的GUI程序開發中,有一些kon的東西,他們到底是什么意思,分別是做什么用的,我再這里多這些術語做一些解釋。首先是圖形框架的概念,圖形框架由Eikon實現,在早期的Symbian OS v5 中,它僅支持8位的窄字符生成,到了v5.1,Unicode成了唯一支持的生成方式,為了體現支持Unicode,把名稱改為Uikon了,但是實現圖形框架的仍舊沒有更改名稱, Eikon(Uikon)的類包括:CEikApplication,CEikDocument,CEikAppUi,CEikEnv。在Symbain OS v6.1 的Series 60 UI 使用的附加層,這個附加層用于Uikon框架外觀和行為的修改。在Symbain OS v7.0的UIQ程序中,Qikon取代了Avkon執行相似的工作。APPARC被稱為應用程序框架,它包括CApaApplication和CApaDocument類。CONE是指控件環境,是Control Enviroment的縮寫。

所有的類都是 CBase 類的派生類。CBase 類擁有一些比較有用的特性: 它會把所有的成員數據初始化為零;有一個虛構造函數;另外它還實現了 Symbian OS 垃圾清理棧。

Launch sequence and command handling

以下是 HelloWorld 運行的序列圖。

在程序啟動的時候,其真正啟動的并非應用程序。而是一個名為apprun.exe的文件,apprun.exe調用了應用程序,但是必須給apprun.exe一些調用的參數信息:程序名字和應用程序文件名。然后,apprun.exe通過應用程序框架裝載應用程序DLL。

Figure-2: Hello World Basic Sequence diagram

下面解釋一下每一個消息的含義:

1應用程序被運行,framework 載入應用 DLL ,并調用 E32Dll 方法。
1-2

framework 調用 NewApplication 方法,創建了一個 HelloWorldBasic 類的實例,并返回一個指向它指針,隨后,framework將利用這個指針完成應用程序其他部分的構建工作。

4

framework 調用 AppDllUid 方法為這個應用程序獲取UID。UID上唯一的他的作用是

5-8

framework 調用CHelloWorldBasicApplication 對象的 CreateDocumentL 方法。這樣就創建了一個應用程序 Document 對象,并返回指向它的指針,這樣 framework 就可以非常快捷地調用 Document 的方法對象了。Document 對象利用 NewL 方法,依照 Symbian OS 所規定的順序構造其自身。

9

framework 調用 AppDllUid 查看是否有必要從文件系統加載文件。由于 HelloWorldBasic 這個例子中不需要保持任何數據,所以也就沒有與之相關的數據文件了。

10-11

framework 調用 Document 對象的 CreateAppUiL 方法創建 App UI 對象,并返回指向該對象的指針。

12

framework 調用 ConstructL 方法構造 App UI 對象。framework 分開調用了 App UI 的構造函數和 ConstructL 方法,其目的在于,framework 可以在構造 App UI 對象前完成一些必要的初始化工作。

13

ConstructL 方法首先調用了基類的 BaseConstructL 。這個過程中,與應用相關的資源文件被讀取。

14-16

App UI 對象 調用 NewL 方法創建 AppView 對象 ,這里 Symbian 使用了兩個替代構造函數。

17

framework 調用 Draw 方法來繪制 View , 這個時候,設備會顯示一個空的屏幕。

18-20

當用戶選擇選擇了一個菜單選項的時候,HandlCommandL 被 framework 調用,并且傳遞一個名為 aCommand 的參數,這個參數指出了用戶所選擇的命令。App UI 要為這個菜單命令請求一個合適的動作。在這個例子里面,它選擇了在屏幕顯示 "HelloWorld" 字樣。

The DLL entry point

Figure-3: Program Start Run

程序一旦運行 E32Dll 就被首先調用了,并傳入 aReason 參數。這個參數可以是一下幾個類型 EDllProcessAttach, EDllThreadAttach, EDllThreadDetach 或 EDllProcessDetach。.

E32Dll 是一個全局函數,稱為 DLL 入口點。這個函數在 Symbian OS 應用程序中是必須出現的,否則程序就會連接錯誤(Link Error)。

在這個范例中,函數返回了 KErrNone 來說明沒有什么問題。在這個入口點中,可以用來初始化和重置應用程序所需要的一些本地存儲線程。

最后需要注意的是,雖然在模擬器中,這個 DLL 入口點被調用,但是在目標設備上,默認情況下它將不被調用,如果需要在目標設備調用該 DLL 入口,那么需要在你的 .mmp文件中加入下面這一行:

EPOCCALLDLLENTRYPOINTS

Creating the Application object

Figure-4:Creating the Application object

在這里比較重要的一點需要注意的是:NewApplication 是被 DLL Export 的 (這個 Export 不知道要怎么表達,總之,Export 之后這個函數就可以被 DLL 外部訪問了,可以理解為發布只類的吧)。它使用 EXPORT_C 聲明,如果沒有 EXPORT_C 聲明,那么代碼就會連接失敗。

framework 首先調用那些被 DLL Export 的函數,也就是說,應用程序 DEF 文件中第一個定義的函數必須是 NewApplication 函數,這樣那些開發工具就可以自動識別當前的應用程序是 Symbian OS 應用程序。

需要注意的是,這個構造函數沒有使用通常 Sybiam OS 的 new (ELeave) methed_name 格式,而是使用了 C++ new 方法的格式,這是因為在這個時候 TRAP harness 還沒有被創建,如果系統沒有為應用程序獲取內存,那么返回一個NULL指針,隨后這件事情(內存未獲取的事情)就被 framework 核對并處理。

Getting the application's UID

?

Figure-5:Getting the application's UID

用于獲取 UID 的 AppDllUid 函數必須出現,否則應用程序發生連接錯誤。

Creating the Document object

Figure-5:Creating the Document object

關于程序程序更多細節請看代碼,不做細述了 VC++6工程文件下載

轉載于:https://www.cnblogs.com/jackyChen/archive/2006/06/05/417923.html

總結

以上是生活随笔為你收集整理的详解HelloWorldBasic实例的全部內容,希望文章能夠幫你解決所遇到的問題。

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