久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團論壇 http://www.bjzhda.cn

曙海教育集團論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標題:symbian開發介紹

1樓
wangxinxin 發表于:2010-12-3 14:50:05
symbian操作系統與普通pc的不同是:
  symbian上內存不夠多 ,并且cpu速度慢,所以開發的話需要考慮到節省內存的原則 另外就是分配內存失敗時的處理 在這點pc基本上不用考慮 因為有真實內存加上虛擬內存 夠用的
  symbian操作系統可能運行好幾個月 但是你的程序隨時可能因為異常而退出 退出時釋放程序使用的內存及其它相關資源就相當重要
  
界面開發最簡單的方法是使用c++ 把相關的圖形操作使用類來封裝,所以symbian的sdk以c++ 類庫形式提供 如果你還是使用c 那還是趕緊學習c++

由于symbian運行的環境有限,所以為了提高性能減少資源使用 symbian對標準c++進行了一定的修改,其中最明顯的是去掉了異常處理機制

另一個就是對模板進行了簡化 當然模板方面在語言開發中不會有不同 只是修改了它的實現 這個可以不用管 只是像c++中的模板一樣使用好了

symbian在語言級不支持異常,但是以庫與宏的形式來提供對導常的支持
throw 對應于 User::Leave或是leave相關函數
try{}catch(...){}對于于TRAP和TRAPD宏 TRAPD宏與TRAP只是增加了變量定義過程 這兩個沒有區別

另外 由于資源有限,所以有些程序可能因為不正常的使用資源而死掉 或是因為資源使用完而無法正常執行
這時 雖然可以自己增加錯誤處理過程 但是這樣的過程太多了 如內存分配 每次分配完 都要檢查是不是成功 沒有成功就釋放資源程序退出 這樣代碼量就很大 而在實時系統中 需要的是代碼少而精
所以 symbian提供了cleanupstack(清除堆棧)機制
當你申請了資源后 把它Push到cleanupstack中 那后面如果某個申請失敗了 可以直接調用User::Leave退出程序 操作系統會自動幫你釋放你申請的資源 這樣代碼量就減少
如果已經成功的使用完資源了 需要自己釋放 那就調用PopAndDestroy手動釋放它
  
為了保證程序退出時用戶申請的資源全部釋放(主要是內存) 所以symbian同時提供了heap marking機制,程序開始時標記當前堆信息 退出時檢查并釋放沒有釋放的堆
  
  總之就是symbian開發中需要自己處理下面的事情:
   trap harness,cleanup stack,leave,heap marking


其實跟c++比起來 symbian對釋放資源的操作通過cleanupstack進行了支持
只是需要自己手動的把資源放到cleanupstack中
這樣可以認為是c++的手動管理資源與java的自動資源管理的一個折中
第一個控制臺下的hello world程序
很多語言都是從hello world 開始 學習symbian也不例外 下面從一個簡單的hello world程序開始 介紹symbian的特點
CODE
//hellotext.cpp
#include
#include
LOCAL_D CConsoleBase* gConsole;
//  Real main function
void MainL()
{
TBuf    helloWorld(_L("hello"));
helloWorld.Append(_L("World"));
gConsole->Printf(helloWorld);
// 可以把上面三句改成gConsole->Printf(_L"hello world");
}
//  Console harness
void ConsoleMainL()
{
gConsole    = Console::NewL(_L("Hello Text"),
         TSize(KConsFullScreen,KConsFullScreen));
CleanupStack::PushL(gConsole);
MainL();
User::After(5000000);
CleanupStack::PopAndDestroy(gConsole);
}
GLDEF_C TInt    E32Main()
{
__UHEAP_MARK;
CTrapCleanup* cleanupStack  = CTrapCleanup::New();
TRAPD(error,ConsoleMainL());
__ASSERT_ALWAYS(!error,User::Panic(_L("SCMP"),error));
delete cleanupStack;
__UHEAP_MARKEND;
return 0;
}


編譯與運行
symbian的編譯要求比較奇怪
它需要一個bld.inf文件與一個mmp文件
bld.inf聲明build的相關信息 通常只包括這次build會引用到的mmp文件
.mmp文件保存工程與makefile相關的信息 用于具體的build過程 它也叫makmakefile project ,也就是創建makefile的文件
bld.inf的文件名是固定的
.mmp文件的文件名則根據不同的工程而起不同的名字
下面是hellotext工程中這兩個文件的內容
CODE
//  BLD.INF
PRJ_MMPFILES
hellotext.mmp
CODE
//  hellotext.mmp
TARGET      HelloText.exe
TARGETTYPE  exe
SOURCEPATH  .
UID         0
SOURCE      hellotext.cpp
USERINCLUDE .
SYSTEMINCLUDE   \epoc32\include
LIBRARY     euser.lib
把上面兩個文件保存到與hellotext.cpp相同的目錄下
編譯過程:
1 打開一個dos窗口
2 cd 到hellotext.cpp所在目錄
3 運行下面命令
bldmake bldfiles
abld build wins udeb
運行完后 你就可以到
epoc/release/wins/udeb目錄下查找hellotext.exe文件
//  BLD.INF
PRJ_MMPFILES
hellotext.mmp
bld.inf只是聲明這個build需要調用hellotext.mmp模塊

CODE
// hellotext.mmp
TARGET HelloText.exe 生成的應用程序名是hellotext.exe
TARGETTYPE exe 生成的應用程序類型是exe類型,在symbian上可運行的程序類型有exe與app,另外還支持生成其它類型文件,如dll
SOURCEPATH . 在哪里查找源文件 這里指示是在當前目錄下
UID 0 對exe程序不需要指定,這里寫0
SOURCE hellotext.cpp 生成應用程序需要的源文件,這里是hellotext.cpp 可以有多個source 一直照這樣的格式寫就可以
USERINCLUDE . 用戶自定義的頭文件在哪里查找 這里是當前目錄
SYSTEMINCLUDE \epoc32\include 系統頭文件在哪里查找 一般都是這個值
LIBRARY euser.lib 需要鏈接的庫 這是euser.lib

symbian的開發環境是使用perl開發的
所以需要有一個確定的文件名聲明工程內容 這就是bld.inf
bldmake編譯時先讀bld.inf 看需要哪個文件指導編譯過程
然后對mmp文件進行轉換,生成makefile及其它相關的編譯規則文件 同時在當前目錄下生成abld.bat文件
后面就是使用abld進行具體編譯
bld.inf意義就是 build info.編譯信息
mmp文件就是 makmake file
bldmake 就是build make info


bldmake bldfiles 創建build files
abld build wins udeb 創建win simulator unicode debug 版本

另外可能用的其它兩個命令是
bldmake clean 清除生成的build file,這在改變mmp文件后應該做
abld reallyclean 清除生成的目標文件(.o) 這在改變源文件內容后使用


symbian 模擬器樣子
在命令行下輸入epoc得到
如果沒錢買智能手機 如p910 那可以拿這個來體會一下效果



剛才編譯好的程序的運行
運行epoc/release/wins/udeb/hellotext.exe 看到
沒有抓圖工具 無法上傳
代碼說明
因為手機上沒有dos或是xterm窗口,所以需要聲明一個console類,
打開一個控制臺窗口
LOCAL_D CConsoleBase* gConsole;
//  Real main function
void MainL()
{
控制臺打印
gConsole->Printf(_L"hello world");
}
//  Console harness
void ConsoleMainL()
{
NewL類似標準c中的new 由于symbian中沒有異常,
使用leave trapd代替標準c++中throw catch,
所以如果函數可能會leave的話 函數名后會加上一個L   
gConsole    = Console::NewL(_L("Hello Text"),
         TSize(KConsFullScreen,KConsFullScreen));
symbian中為了避免資源瀉漏 使用cleanupstack把需要釋放的內容放到cleanupstack中,
當程序非法退出時 symbian操作系統會自動通過cleanupstack來對資源進行釋放
保證資源的釋放放是重要的
因為symbian可用的資源并不多 內存現在最多也就16M
而它可能一直運行好幾個月(想看如果你不常關機的話)
CleanupStack::PushL(gConsole);
調用自己的函數
MainL();
停止5秒 讓你看到屏幕顯示
User::After(5000000);
手動釋放剛才申請的資源
CleanupStack::PopAndDestroy(gConsole);
}
symbian中exe程序的入口定義如下GLDEF_C TInt    E32Main
而不是標準C中的的main
可以認為symbian自己定義了main函數,
然后在里面進行自己的初始化
初始化完后再調用E32main
(在psos下開發時也是這樣 psos的入口函數是root 在其它實時系統開發與普通系統不同
因為可能需要特殊的初始化 )
GLDEF_C TInt    E32Main()
{
__UHEAP_MARK;定義堆保護 保證程序退出時會釋放資源
創建清除堆棧類
CTrapCleanup* cleanupStack  = CTrapCleanup::New();
TRAPD(error,ConsoleMainL());  這個相當于標準c++中的catch(...)
__ASSERT_ALWAYS(!error,User::Panic(_L("SCMP"),error));
delete cleanupStack;
__UHEAP_MARKEND; 堆保護完成 在這里釋放掉所有內存
return 0;
}
結合上面的代碼看symbian提供的機制
Leave , trap,cleanupstack ,heapmarking 都存在了

這是一個典型的symbian程序都會使用到的功能


函數是不是會Leave 這個在symbian中是以函數名的形式提供
函數名后面是L的表示它會Leave 函數名后面是LC的表示它會Leave,并且已經把指針push到cleanupstack中了

leave的情況:
是不是任何情況都會Leave呢
當然不是 只有資源申請失敗或是操作失敗時時會Leave 在系統庫提供的函數是這樣的

一般它也會提供不Leave的相同功能的函數
如Defined in TDesC8: 看TDesc8的類說明
Alloc(), AllocL(), AllocLC(), Compare(), CompareC(), CompareF(), Find(), Find(), FindC(), FindC(), FindF(), FindF(), Left(), Length(), Locate(), LocateF(), LocateReverse(), LocateReverseF(), Match(), MatchC(), MatchF(), Mid(), Mid(), Ptr(), Right(), Size(), operator!=(), operator<(), operator<=(), operator==(), operator>(), operator>=(), operator[]()

這里提供了Alloc()和AllocL()
看它們的說明
Alloc()
HBufC8* Alloc() const;
Description
Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor's data.

Return value
HBufC8* A pointer to the new 8 bit heap descriptor, if creation is successful. NULL, if creation of the descriptor fails.

共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團
Powered By 曙海教育集團 Version 2.2
Processed in .01563 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
国产欧美久久久精品影院| 色呦呦一区二区三区| 久久国产精品区| 视频在线在亚洲| 一区二区三区 在线观看视频| 欧美国产乱子伦| 国产欧美一区二区三区沐欲| 精品第一国产综合精品aⅴ| 欧美成人福利视频| 欧美成人激情免费网| 欧美一区二区三区啪啪| 亚洲高清乱码| 色哟哟日韩精品| 欧美日韩免费视频| 欧美一区二区在线观看| 精品国精品国产尤物美女| 欧美成人伊人久久综合网| 久久综合久久综合久久| 国产偷国产偷亚洲高清人白洁| 欧美国产精品一区二区三区| 亚洲人成网站在线| 亚洲国产成人av| 美女视频黄a大片欧美| 综合久久久久久久| 国产视频911| 国产亚洲精品aa| 亚洲欧美福利一区二区| 天堂久久一区二区三区| 国模冰冰炮一区二区| 成人深夜在线观看| 国产精品免费观看高清| 日韩精品最新在线观看| 一本到不卡免费一区二区| 欧美日韩精品三区| 国产午夜亚洲精品理论片色戒| xf在线a精品一区二区视频网站| 国产精品视频yy9299一区| 亚洲一区二区av在线| 精品一区二区三区免费视频| 成人的网站免费观看| 国产精品亚洲不卡a| 亚洲国产一区二区精品视频| 欧美日韩国产系列| 国产欧美日韩精品一区| 亚洲成人av一区二区三区| 国产精品一区二区你懂的| 97超碰人人看人人| 欧美日韩一区二区三| 欧美日韩国产综合视频在线观看| 久久久蜜桃精品| 亚洲成人免费av| kk眼镜猥琐国模调教系列一区二区| 精品婷婷色一区二区三区蜜桃| 在线看视频不卡| 国产日韩综合av| 捆绑调教一区二区三区| 俄罗斯精品一区二区三区| 91成人国产精品| 久久综合999| 天天色综合天天| 波多野结衣久草一区| 欧美日韩一区二区欧美激情| 亚洲欧美在线视频观看| 国产一区视频网站| 美女黄毛**国产精品啪啪| 91精品国产91热久久久做人人 | 色综合天天视频在线观看| 欧美xfplay| 五月婷婷色综合| 国产精品视频入口| 欧美日韩亚洲综合在线| 亚洲乱码中文字幕| 94-欧美-setu| 神马影院午夜我不卡| 欧美一区二区三区四区在线观看| 亚洲制服丝袜在线| 成人黄色在线免费观看| 欧美福利视频一区| 视频一区欧美精品| 国产伦精品一区二区三区高清| 欧美理论片在线| 午夜影院久久久| 国产原创精品| 精品国产乱码久久久久久蜜臀| 一区二区三区四区在线| 国产传媒欧美日韩| 欧美一区2区视频在线观看| 日欧美一区二区| 日韩av一级大片| 一区二区中文字幕在线| 91丝袜美女网| 欧美精品一区二区三区四区| 国产美女一区二区三区| 色欧美88888久久久久久影院| 国产精品日韩精品欧美在线| av不卡一区二区三区| 制服丝袜成人动漫| 久久精品国产亚洲5555| 永久免费精品视频网站| 亚洲欧美色一区| 国产伦精品一区二区三区免| 欧美精品七区| 亚洲欧美在线高清| 国新精品乱码一区二区三区18| 久久久久久电影| 91在线丨porny丨国产| 日韩欧美一级片| 国产美女一区二区三区| 欧美日韩亚洲综合一区二区三区| 日韩福利电影在线| 椎名由奈jux491在线播放 | 日韩精彩视频在线观看| 日韩欧美三级电影| 亚洲精品国产无套在线观| 国产综合第一页| 国产欧美日韩精品在线| 99国产超薄丝袜足j在线观看| 久久综合视频网| 动漫一区二区在线| 日韩国产一区久久| 婷婷综合久久一区二区三区| 亚洲综合欧美日韩| 理论电影国产精品| 欧美精品18+| av电影在线观看完整版一区二区| 精品成人在线观看| 成人av影视在线| 亚洲色大成网站www久久九九| 蜜桃视频在线观看91| 亚洲精品国产第一综合99久久| 日本一区免费在线观看| 五月天欧美精品| 欧美日韩国产精品自在自线| 国产成人av电影在线| 26uuu亚洲综合色欧美 | 99热国产精品| 欧美国产日本视频| 欧美激情第六页| 热久久国产精品| 91麻豆精品国产91久久久久久久久| 成人午夜视频福利| 国产三级精品视频| 日韩欧美精品在线不卡| 麻豆国产一区二区| 精品国免费一区二区三区| 风间由美一区二区av101| 日本一区二区三区四区| 亚洲一区尤物| 成人免费不卡视频| 午夜精品一区二区三区电影天堂| 精品福利一二区| 欧美综合亚洲图片综合区| 99久久无色码| 久久99精品久久久久久国产越南| 欧美国产一区二区| 91精品国产品国语在线不卡| 欧洲久久久久久| 91视视频在线观看入口直接观看www | 精品福利一区二区三区| 亚洲国产精品www| 91免费在线观看网站| 精品亚洲aⅴ乱码一区二区三区| 中文字幕中文字幕中文字幕亚洲无线| 91精品国产综合久久福利软件| 日韩三级电影| 国产一级二级三级精品| 成人污视频在线观看| 蜜臀av一级做a爰片久久| 亚洲美腿欧美偷拍| 国产色91在线| 欧美变态凌虐bdsm| 欧美日韩午夜在线视频| 亚洲自拍三区| 日本一区视频在线观看免费| 91九色偷拍| 成人av午夜影院| 国产乱人伦偷精品视频不卡| 水蜜桃久久夜色精品一区的特点| 18欧美亚洲精品| 欧美极品美女视频| 久久香蕉国产线看观看99| 91精品国产高清一区二区三区| 欧美性猛片xxxx免费看久爱| 亚洲一区二区在线观| 四虎影院一区二区三区| 老牛影视免费一区二区| 国精产品99永久一区一区| www.一区二区三区| 91久久精品www人人做人人爽| 成人黄色电影在线 | 一区二区三区免费| 国产精品卡一卡二卡三| 国产日韩一级二级三级| www成人在线观看| 欧美电影免费观看高清完整版在线观看 | 亚洲宅男天堂在线观看无病毒| 亚洲欧洲精品一区二区精品久久久| 国产婷婷精品av在线| 欧美—级在线免费片| 国产精品色呦呦|