大话WinCE与WinXP应用程序开发的差异性
//=====================================================================
//TITLE:
//??? 大話WinCE與WinXP應(yīng)用程序開發(fā)的差異性
//AUTHOR:
//??? norains
//DATE:
//??? Wednesday 21-April-2010
//Environment:
//??? Windows CE 5.0
//??? Windows XP
//=====================================================================
?
??? ?"龍生龍,鳳生鳳,老鼠生的兒子會(huì)打洞",所以無論是WinCE,還是WinXP,都是微軟一個(gè)媽生的,自然有其相似的特點(diǎn);但又由于"龍生九子,各有不同",故這兩者的區(qū)別肯定還是存在的。
?
?? ?因此今天我就來一回大話,大談闊論,不嚴(yán)謹(jǐn),不科學(xué),隨意而發(fā)。
?
?? ?首先,來大話一下開發(fā)工具。
?
?? ?對(duì)于近年才接觸WinCE開發(fā)的朋友來說,見到EVB這個(gè)字眼可能會(huì)覺得非常陌生。想當(dāng)年WinCE 3.0的時(shí)代,EVB可是和EVC是WinCE開發(fā)的兩把利器。只不過后來估計(jì)微軟看著EVB不順眼,在4.0開始,就將EVB橫掃出門,只剩下EVC一枝獨(dú)秀。只不過EVC王者獨(dú)尊的態(tài)勢(shì)注定不可能太久,從5.0開始,VS就已經(jīng)開始支持其開發(fā)。后輩VS支持STL開發(fā)的完善程度,編譯器的效率等等,都是EVC所無法企及的。隨著時(shí)間的推移,EVC注定也只能退出歷史的舞臺(tái)。只不過,EVC4.0很可能和接下來要說的VC6.0成為一個(gè)永恒的經(jīng)典。
?
?? ?轉(zhuǎn)移到桌面Windows的開發(fā),大家最熟悉不過的就是vc6.0。這款軟件,堪稱是經(jīng)典,無論是執(zhí)行速度,還是編譯速度,在當(dāng)年都是無望而不可及的高峰。即使是現(xiàn)在,很多人對(duì)此還津津樂道,特別是很多高校,教導(dǎo)C++采用的還是VC6.0,可見其影響力。只不過,技術(shù)是不停地發(fā)展的,微軟注定不會(huì)讓VC6.0舒服,后續(xù)又逐漸推出VS系列。
?
?? ?我一直認(rèn)為,VS2005是微軟開發(fā)工具的一個(gè)里程碑,它結(jié)束了之前微軟旗下編程工具的混亂局面,全部統(tǒng)一到vs這個(gè)大家族里面:
?
用EVC開發(fā)WinCE應(yīng)用程序?NO,NO,請(qǐng)使用vs2005!
用PB編譯WinCE系統(tǒng)?NO,NO,請(qǐng)使用vs2005!
用VC開發(fā)WinXP程序?NO,NO,請(qǐng)使用vs2005!
你所能想到的開發(fā)方式,vs2005都可以幫你解決。更為有意思的是,在此之前,同一套代碼,分別適用于WinCE和WinXP,那么你就必須為這兩個(gè)系統(tǒng)建立不同的工程:一個(gè)是給EVC用的,另一個(gè)是給VC。但如果你使用VS2005之后,那么一切都不同了。雖然一開始會(huì)強(qiáng)制讓你選擇開發(fā)的平臺(tái),但實(shí)際上生成工程之后,你可以手動(dòng)添加不同的SDK。換句話來說,你只要簡(jiǎn)單地在vs2005上選擇不同的SDK,就可以編譯不同平臺(tái)的程序。相對(duì)以前,這無疑是一個(gè)巨大的進(jìn)步。
扯談完開發(fā)工具,我們?cè)賮砜纯凑{(diào)試的方式。在WinXP里,調(diào)試的環(huán)境和開發(fā)的環(huán)境是共用的。這個(gè)比較好理解,不就是本機(jī)編譯的程序會(huì)直接在本機(jī)上運(yùn)行嘛。只不過有一些危險(xiǎn)的操作,估計(jì)沒幾個(gè)人會(huì)調(diào)試,比如說軟件上有全盤格式化功能,我想沒幾個(gè)人會(huì)在本機(jī)上調(diào)試吧?WinCE就安全點(diǎn),反正直接在WinXP上點(diǎn)擊WinCE程序會(huì)給你彈出一個(gè)錯(cuò)誤的運(yùn)行框。所以,要調(diào)試WinCE程序,你只有兩種途徑,一個(gè)是使用模擬器,另一個(gè)就是通過ActiveSync連接到開發(fā)板。而這兩種方式,最好的自然是后者,畢竟模擬器,顧名思義,就是"模擬",很多實(shí)際上會(huì)發(fā)生的問題很可能會(huì)被屏蔽。只不過,如果是開發(fā)消費(fèi)類電子,在還沒有板子回來前,模擬器確實(shí)是唯一的選擇。
具體到API函數(shù)代碼方面,也確實(shí)有意思。WinXP有的函數(shù),WinCE不一定具備;同樣,WinCE隨處可見的,也不一定在WinXP上有其身影;即使是兩者都有的,其參數(shù)也不一定相同。
不信?你在WinCE下給我找找SystemTimeToTzSpecificLocalTime,然后在WinXP下也搜搜SetEventData,最后比較一下ReadFile最后一個(gè)形參試試?如果你不需要代碼橫跨兩個(gè)平臺(tái),那么這些都不是問題;如果你需要互相移植,那么前面的兩個(gè)問題也不是什么大問題,大不了自己重新寫一個(gè)同名函數(shù)即可。最郁悶的是最后一個(gè),兩個(gè)系統(tǒng)都有相應(yīng)的函數(shù),只是形參不同。像ReadFile這樣算是好的,最后一個(gè)形參WinCE明令指出必須設(shè)置為NULL,你將該代碼原封不動(dòng)移植到WinXP下,也能正常工作。但有的函數(shù)就沒有那么好的運(yùn)氣了,比如說CreateProcess的倒數(shù)第二個(gè)形參psiStartInfo,在WinCE下必須設(shè)置NULL,但如果你還是不加更改照搬到WinXP,那么迎接你的將是程序的崩潰--因?yàn)樵赪inXP下,該形參不能為NULL!
不僅API函數(shù)需要留意,其實(shí)消息處理機(jī)制也必須注意。因?yàn)閃inCE是一個(gè)精簡(jiǎn)的系統(tǒng),實(shí)時(shí)性要求高,所以在WinCE下面消息處理機(jī)制有點(diǎn)點(diǎn)和WinXP不同。很可能在WinXP下跑得很正常的代碼,在WinCE下會(huì)啞火;同樣的道理,能在WinCE完美表現(xiàn)的代碼,也許在WinXP下是一團(tuán)糟。如果遇到這種情況,不妨從消息處理函數(shù)入手,說不定能有意外的驚喜。
總結(jié)
以上是生活随笔為你收集整理的大话WinCE与WinXP应用程序开发的差异性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 民生银行信用卡现金分期常见问题汇总
- 下一篇: wince对中文字体的支持