轉載自CSDN norains的blog,原文地址:
http://blog.csdn.net/norains/archive/2010/05/18/5605074.aspx
"龍生龍,鳳生鳳,老鼠生的兒子會打洞",所以無論是WinCE,還是WinXP,都是微軟一個媽生的,自然有其相似的特點;但又由於"龍生九子,各有不同",故這兩者的區別肯定還是存在的。
因此今天我就來一回大話,大談闊論,不嚴謹,不科學,隨意而發。
首先,來大話一下開發工具。
對於近年才接觸WinCE開發的朋友來說,見到EVB這個字眼可能會覺得非常陌生。想當年WinCE
3.0的時代,EVB可是和EVC是WinCE開發的兩把利器。只不過後來估計微軟看著EVB不順眼,在4.0開始,就將EVB橫掃出門,只剩下EVC一
枝獨秀。只不過EVC王者獨尊的態勢註定不可能太久,從5.0開始,VS就已經開始支援其開發。後輩VS支援STL開發的完善程度,編譯器的效率等等,都
是EVC所無法企及的。隨著時間的推移,EVC註定也只能退出曆史的舞台。只不過,EVC4.0很可能和接下來要說的VC6.0成為一個永恒的經典。
轉移到案頭Windows的開發,大家最熟悉不過的就是vc6.0。這款軟體,堪稱是經典,無論是執行速度,還是編譯速度,在當年都是無望而不可及的高
峰。即使是現在,很多人對此還津津樂道,特別是很多高校,教導C++採用的還是VC6.0,可見其影響力。只不過,技術是不停地發展的,微軟註定不會讓
VC6.0舒服,後續又逐漸推出VS系列。
我一直認為,VS2005是微軟開發工具的一個裡程碑,它結束了之前微軟旗下編程工具的混亂局面,全部統一到vs這個大家族裡面:
用EVC開發WinCE應用程式?NO,NO,請使用vs2005!
用PB編譯WinCE系統?NO,NO,請使用vs2005!
用VC開發WinXP程式?NO,NO,請使用vs2005!
你所能想到的開發方式,vs2005都可以幫你解決。更為有意思的是,在此之前,同一套代碼,分別適用於WinCE和WinXP,那麼你就必須為這兩個
系統建立不同的工程:一個是給EVC用的,另一個是給VC。但如果你使用VS2005之後,那麼一切都不同了。雖然一開始會強制讓你選擇開發的平台,但實
際上產生工程之後,你可以手動添加不同的SDK。換句話來說,你只要簡單地在vs2005上選擇不同的SDK,就可以編譯不同平台的程式。相對以前,這無
疑是一個巨大的進步。
扯談完開發工具,我們再來看看調試的方式。在WinXP裡,調試的環境和開發的環境是共用的。這個比較好理
解,不就是原生編譯的程式會直接在本機上運行嘛。只不過有一些危險的操作,估計沒幾個人會調試,比如說軟體上有全盤格式化功能,我想沒幾個人會在本機上調
試吧?WinCE就安全點,反正直接在WinXP上點擊WinCE程式會給你彈出一個錯誤的運行框。所以,要調試WinCE程式,你只有兩種途徑,一個是
使用模擬器,另一個就是通過ActiveSync串連到開發板。而這兩種方式,最好的自然是後者,畢竟模擬器,顧名思義,就是"類比",很多實際上會發生
的問題很可能會被屏蔽。只不過,如果是開發消費類電子,在還沒有板子回來前,模擬器確實是唯一的選擇。
具體到API函數代碼方面,也確實有意思。WinXP有的函數,WinCE不一定具備;同樣,WinCE隨處可見的,也不一定在WinXP上有其身影;即使是兩者都有的,其參數也不一定相同。
不信?你在WinCE下給我找找SystemTimeToTzSpecificLocalTime,然後在WinXP下也搜搜
SetEventData,最後比較一下ReadFile最後一個形參試試?如果你不需要代碼橫跨兩個平台,那麼這些都不是問題;如果你需要互相移植,那
麼前面的兩個問題也不是什麼大問題,大不了自己重新寫一個同名函數即可。最鬱悶的是最後一個,兩個系統都有相應的函數,只是形參不同。像ReadFile
這樣算是好的,最後一個形參WinCE明令指出必須設定為NULL,你將該代碼原封不動移植到WinXP下,也能正常工作。但有的函數就沒有那麼好的運氣
了,比如說CreateProcess的倒數第二個形參psiStartInfo,在WinCE下必須設定NULL,但如果你還是不加更改照搬到
WinXP,那麼迎接你的將是程式的崩潰--因為在WinXP下,該形參不能為NULL!
不僅API函數需要留意,其實訊息處理
機制也必須注意。因為WinCE是一個精簡的系統,即時性要求高,所以在WinCE下面訊息處理機制有點點和WinXP不同。很可能在WinXP下跑得很
正常的代碼,在WinCE下會啞火;同樣的道理,能在WinCE完美表現的代碼,也許在WinXP下是一團糟。如果遇到這種情況,不妨從訊息處理函數入
手,說不定能有意外的驚喜。