毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精


曙海教育集團(tuán)論壇3G手機(jī)技術(shù)專區(qū)Symbian開發(fā) → symbian開發(fā)介紹


  共有10393人關(guān)注過本帖樹形打印

主題:symbian開發(fā)介紹

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
symbian開發(fā)介紹  發(fā)帖心情 Post By:2010-12-3 14:50:05

symbian操作系統(tǒng)與普通pc的不同是:
  symbian上內(nèi)存不夠多 ,并且cpu速度慢,所以開發(fā)的話需要考慮到節(jié)省內(nèi)存的原則 另外就是分配內(nèi)存失敗時(shí)的處理 在這點(diǎn)pc基本上不用考慮 因?yàn)橛姓鎸?shí)內(nèi)存加上虛擬內(nèi)存 夠用的
  symbian操作系統(tǒng)可能運(yùn)行好幾個(gè)月 但是你的程序隨時(shí)可能因?yàn)楫惓6顺?退出時(shí)釋放程序使用的內(nèi)存及其它相關(guān)資源就相當(dāng)重要
  
界面開發(fā)最簡單的方法是使用c++ 把相關(guān)的圖形操作使用類來封裝,所以symbian的sdk以c++ 類庫形式提供 如果你還是使用c 那還是趕緊學(xué)習(xí)c++

由于symbian運(yùn)行的環(huán)境有限,所以為了提高性能減少資源使用 symbian對標(biāo)準(zhǔn)c++進(jìn)行了一定的修改,其中最明顯的是去掉了異常處理機(jī)制

另一個(gè)就是對模板進(jìn)行了簡化 當(dāng)然模板方面在語言開發(fā)中不會有不同 只是修改了它的實(shí)現(xiàn) 這個(gè)可以不用管 只是像c++中的模板一樣使用好了

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

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


其實(shí)跟c++比起來 symbian對釋放資源的操作通過cleanupstack進(jìn)行了支持
只是需要自己手動的把資源放到cleanupstack中
這樣可以認(rèn)為是c++的手動管理資源與java的自動資源管理的一個(gè)折中
第一個(gè)控制臺下的hello world程序
很多語言都是從hello world 開始 學(xué)習(xí)symbian也不例外 下面從一個(gè)簡單的hello world程序開始 介紹symbian的特點(diǎn)
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;
}


編譯與運(yùn)行
symbian的編譯要求比較奇怪
它需要一個(gè)bld.inf文件與一個(gè)mmp文件
bld.inf聲明build的相關(guān)信息 通常只包括這次build會引用到的mmp文件
.mmp文件保存工程與makefile相關(guān)的信息 用于具體的build過程 它也叫makmakefile project ,也就是創(chuàng)建makefile的文件
bld.inf的文件名是固定的
.mmp文件的文件名則根據(jù)不同的工程而起不同的名字
下面是hellotext工程中這兩個(gè)文件的內(nèi)容
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
把上面兩個(gè)文件保存到與hellotext.cpp相同的目錄下
編譯過程:
1 打開一個(gè)dos窗口
2 cd 到hellotext.cpp所在目錄
3 運(yùn)行下面命令
bldmake bldfiles
abld build wins udeb
運(yùn)行完后 你就可以到
epoc/release/wins/udeb目錄下查找hellotext.exe文件
//  BLD.INF
PRJ_MMPFILES
hellotext.mmp
bld.inf只是聲明這個(gè)build需要調(diào)用hellotext.mmp模塊

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

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


bldmake bldfiles 創(chuàng)建build files
abld build wins udeb 創(chuàng)建win simulator unicode debug 版本

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


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



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

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


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

leave的情況:
是不是任何情況都會Leave呢
當(dāng)然不是 只有資源申請失敗或是操作失敗時(shí)時(shí)會Leave 在系統(tǒng)庫提供的函數(shù)是這樣的

一般它也會提供不Leave的相同功能的函數(shù)
如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.


支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

symbian開發(fā)介紹








簽名
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
尤物av一区二区| 国产精品乱人伦| 欧美一级片在线| 亚洲国产精品一区二区尤物区| av亚洲精华国产精华精华| 久久夜色精品一区| 精品一区二区三区免费毛片爱| 日韩一区二区高清| 天天综合色天天综合| 欧美狂野另类xxxxoooo| 五月综合激情日本mⅴ| 欧洲精品在线观看| 亚洲成在线观看| 欧美一区二区黄| 激情小说欧美图片| 国产精品三级视频| 99re这里都是精品| 亚洲不卡av一区二区三区| 在线成人免费视频| 久久66热偷产精品| 欧美国产日韩一二三区| 99亚偷拍自图区亚洲| 亚洲精品免费在线| 日韩免费视频一区| 国产精品一卡二| 亚洲裸体在线观看| 91精品国产综合久久福利| 国产一区二区三区免费在线观看| 国产欧美日本一区二区三区| 在线这里只有精品| 精品一区二区在线观看| 国产精品乱人伦中文| 欧美性猛片aaaaaaa做受| 久久精品国产999大香线蕉| 国产日韩一级二级三级| 欧美三级欧美一级| 懂色中文一区二区在线播放| 亚洲国产日韩一区二区| 国产日韩欧美激情| 欧美日韩精品一区二区三区四区 | 亚洲成人激情自拍| 精品理论电影在线观看| 色狠狠av一区二区三区| 久久精品国产999大香线蕉| 亚洲日本一区二区| 久久蜜桃香蕉精品一区二区三区| 91黄色小视频| 风间由美性色一区二区三区| 日本一区中文字幕| 一区二区欧美精品| 久久久91精品国产一区二区精品 | 国产精品综合av一区二区国产馆| 亚洲人成网站在线| www久久精品| 欧美肥妇毛茸茸| 99re6这里只有精品视频在线观看| 久久国产生活片100| 亚洲欧美另类久久久精品| 久久综合久色欧美综合狠狠| 91精品国产入口在线| 欧美天堂亚洲电影院在线播放| 93久久精品日日躁夜夜躁欧美| 国产裸体歌舞团一区二区| 毛片av一区二区| 欧美bbbbb| 久久99日本精品| 老司机精品视频导航| 青青草国产成人av片免费| 舔着乳尖日韩一区| 蜜桃av噜噜一区| 奇米影视7777精品一区二区| 亚洲一二三级电影| 日韩影院精彩在线| 久久99久久精品| 国产麻豆精品在线| 成人中文字幕在线| 色八戒一区二区三区| 欧美亚洲禁片免费| 4438x成人网最大色成网站| 日韩精品一区二区三区在线观看| 精品少妇一区二区三区| 国产欧美精品一区二区三区四区| 国产蜜臀97一区二区三区| 亚洲欧美日韩综合aⅴ视频| 亚洲制服丝袜在线| 日本成人在线电影网| 国内精品视频666| 成人午夜私人影院| 欧美三片在线视频观看| 日韩一级二级三级| 国产午夜精品一区二区三区视频| 国产精品剧情在线亚洲| 艳妇臀荡乳欲伦亚洲一区| 奇米一区二区三区av| 国产一区二区三区在线观看精品 | 中文字幕一区二区三区在线不卡 | 日本一区二区免费在线| 精品国产一区二区亚洲人成毛片| 欧美精品国产精品| 在线播放/欧美激情| 欧美精品久久久久久久多人混战| 色嗨嗨av一区二区三区| 欧美日韩国产经典色站一区二区三区| 在线观看国产91| 欧美偷拍一区二区| 欧美久久久久久久久| 91精品国产综合久久精品图片| 欧美一卡二卡在线观看| 欧美精品一区二区三区在线播放| 91精品黄色片免费大全| 精品国产网站在线观看| 国产午夜亚洲精品不卡| 中文字幕在线一区免费| 亚洲6080在线| 国产自产视频一区二区三区| 99精品欧美一区二区蜜桃免费 | 国产午夜精品久久久久久久| 亚洲成人高清在线| 久久成人免费电影| 成人av免费在线观看| 欧美日韩在线免费视频| 久久久电影一区二区三区| 综合在线观看色| 午夜精品福利在线| 一本大道久久精品懂色aⅴ| 欧美日韩一区二区三区四区五区| 日韩欧美国产系列| 亚洲天堂久久久久久久| 免费成人美女在线观看| 99久久精品99国产精品| 日韩欧美一二三| 亚洲人成网站在线| 韩国精品主播一区二区在线观看| 色综合中文综合网| 国产精品日韩精品欧美在线| 一区二区三区日韩精品视频| 欧美日韩亚洲综合| 亚洲自拍偷拍图区| 国产在线播放一区二区三区| 色妞www精品视频| 91精品久久久久久久91蜜桃| 自拍偷拍亚洲激情| 国产成人精品免费视频网站| 91精品国产综合久久精品性色| 中文字幕综合网| 亚洲gay无套男同| 国产一区二区三区日韩| 欧美日韩一级二级| 国产精品国产三级国产a| 另类综合日韩欧美亚洲| 在线这里只有精品| 亚洲视频免费看| 成人国产一区二区三区精品| 国产精品久久综合| 成人伦理片在线| 久久精品在线观看| 黄色小说综合网站| 日韩欧美国产一区二区三区| 亚洲曰韩产成在线| 欧美一级欧美一级在线播放| 亚洲成人av一区二区三区| 91蜜桃在线观看| 亚洲蜜臀av乱码久久精品| 成人av先锋影音| 黑人精品欧美一区二区蜜桃| 日本一区二区三区四区在线视频| 久久精品国产**网站演员| 91精品国产色综合久久ai换脸 | 在线观看区一区二| 亚洲精品日韩综合观看成人91| 欧美日免费三级在线| 洋洋av久久久久久久一区| 一本久久a久久免费精品不卡| 亚洲视频一二三区| 欧美午夜精品一区二区三区| 五月婷婷综合在线| 欧美人与禽zozo性伦| 日本不卡视频在线观看| 精品国产不卡一区二区三区| 国产乱码精品一区二区三| 久久精子c满五个校花| 97精品国产露脸对白| 国产精品乱码一区二区三区软件| 成人久久18免费网站麻豆 | 7777女厕盗摄久久久| av在线不卡电影| 亚洲午夜免费电影| 日韩一区二区三区精品视频| 看电视剧不卡顿的网站| 国产亚洲一二三区| 欧美天天综合网| 成人av网站在线观看| 亚洲成在人线在线播放| 亚洲精品一区二区三区99| 99视频热这里只有精品免费| 亚洲人成7777| 欧美日韩免费一区二区三区视频| 成人福利在线看| 天堂av在线一区| 欧美国产一区在线|