WinCE應(yīng)用程序的開(kāi)發(fā)
WinCE應(yīng)用程序的開(kāi)發(fā)是WinCE開(kāi)發(fā)中很重要的一個(gè)環(huán)節(jié)。本文將簡(jiǎn)單介紹一些WinCE應(yīng)用程序開(kāi)發(fā)的基本概念。
先說(shuō)開(kāi)發(fā)工具,目前用得比較多的開(kāi)發(fā)工具有EVC4(SP4)、VS2005、VS2008和Platform Builder。
其中Platform Builder主要是用來(lái)定制操作系統(tǒng)的,雖然也支持編寫(xiě)應(yīng)用程序,但用得相對(duì)較少。記得沒(méi)錯(cuò)的話(huà),它還得先編譯系統(tǒng),才能新建應(yīng)用程序的工程。
VS2005和VS2008是微軟的集大成開(kāi)發(fā)工具,PB6.0就是作為VS2005的插件安裝的(PB6.0目前應(yīng)該是不支持VS2008)。在VS2005中,你可以編譯WinCE6.0的操作系統(tǒng),也可以編譯設(shè)備上的應(yīng)用程序,省去了切換開(kāi)發(fā)環(huán)境的麻煩。
EVC4(SP4)即嵌入式的VC,使用起來(lái)基本跟VC6.0一致。
WinCE應(yīng)用程序的開(kāi)發(fā)相對(duì)桌面Windows應(yīng)用程序的開(kāi)發(fā)有一些特點(diǎn),如下:
1. UNICODE編碼。WinCE中的應(yīng)用程序只能使用UNICODE編碼,桌面系統(tǒng)則支持UNICODE和ANSI碼。在移植PC端程序到設(shè)備上時(shí)需要注意這一點(diǎn)。
2.SDK。SDK即軟件開(kāi)發(fā)支持包,軟件開(kāi)發(fā)都少不了這個(gè),但在WinCE應(yīng)用程序的開(kāi)發(fā)中尤為重要。因?yàn)閃inCE系統(tǒng)本身是一個(gè)非標(biāo)的操作系統(tǒng),它的組件特性和可裁剪性決定了不同的系統(tǒng)支持的API是不同的。而桌面系統(tǒng)相對(duì)標(biāo)準(zhǔn),SDK的作用就弱化了。WinCE中的SDK由系統(tǒng)開(kāi)發(fā)人員在編譯完系統(tǒng)后,通過(guò)Platform Builder導(dǎo)出。應(yīng)用程序的開(kāi)發(fā)人員安裝此SDK,并編寫(xiě)應(yīng)用程序,最終將應(yīng)用程序下載到目標(biāo)平臺(tái)上運(yùn)行測(cè)試。一般來(lái)說(shuō),SDK是應(yīng)用程序和操作系統(tǒng)之間的紐帶,但他們之間也并不是完全一一對(duì)應(yīng)的。譬如,在硬件和操作系統(tǒng)都沒(méi)調(diào)試好時(shí),我們可以先用標(biāo)準(zhǔn)的SDK或者自己定制一個(gè)模擬器的SDK進(jìn)行應(yīng)用程序的開(kāi)發(fā),等硬件和系統(tǒng)調(diào)試完成后再做聯(lián)調(diào)。應(yīng)用程序基于新的SDK編譯一下,甚至無(wú)需重新編譯也可運(yùn)行。當(dāng)然,一個(gè)應(yīng)用程序在別的設(shè)備上跑得很好,但到另外一個(gè)設(shè)備上卻不能工作也是很正常的。就像很多WM上的應(yīng)用程序在WinCE中不能跑一樣,雖然內(nèi)核相同,但系統(tǒng)不同,支持的API也是不同的。
最后說(shuō)說(shuō)開(kāi)發(fā)語(yǔ)言,WinCE應(yīng)用程序的開(kāi)發(fā)有Win32、MFC和Managed等幾種方式。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),選擇使用哪一個(gè)主要看效能,開(kāi)發(fā)的效能和運(yùn)行的效能。根據(jù)能量守恒定律,開(kāi)發(fā)效能和運(yùn)行效能應(yīng)該是一個(gè)此消彼長(zhǎng)的關(guān)系。呵呵,跟能量守恒定律有關(guān)系么?勉強(qiáng)找個(gè)有力證據(jù)吧。托管代碼的開(kāi)發(fā)效率很高,但執(zhí)行效率相對(duì)就低了。這在物資還不是極大豐富的嵌入式系統(tǒng)上,就顯得尤為突出,實(shí)時(shí)性也得不到保證。MFC是基于Window32的一個(gè)基礎(chǔ)類(lèi)庫(kù),封裝了很多Win32的API,方便開(kāi)發(fā)者使用,但它也是有缺點(diǎn)的,似乎也沒(méi)再更新。Win32是這三者中最底層的一個(gè),編譯出的程序小,沒(méi)有額外的包袱,運(yùn)行起來(lái)快,所以開(kāi)發(fā)的難度自然就大了,代碼量也很大。我們?cè)陂_(kāi)發(fā)應(yīng)用程序時(shí)應(yīng)根據(jù)實(shí)際情況選擇更合適的。