?? 123.txt
字號:
前言
幾乎是從Windows CE誕生起,我就開始在它上面工作了。作為一個多年的Windows程序員,能夠將我的Windows程序設計經驗應用到如此多
的不同而又很小的系統上,使我感到吃驚。這些Windows CE系統運行在各個領域,從類似PC的迷你膝上機到蜂窩手機,再到深藏于一些大
型工業設備里的嵌入式設備。Windows CE里的Win32 API使成千上萬的Windows程序員能夠在一個全新的系統領域里寫應用程序。然而,細
微的差別,使得在Windows CE中編程不同于在桌面版本的Windows中編程。我將在本書里進行講解的正是這些差異。
Windows CE到底是什么?
Windows CE是最小,也可能是最有趣的微軟Windows 操作系統。Windows CE徹頭徹尾的被設計成一個基于ROM的,使用Win32 API子集的小
型操作系統。Windows CE把Windows API擴展到那些不支持大容量XP內核的領域和機器上。
目前逐步消亡的Windows 95/98/Me 對那些需要向后兼容MS-DOS、Windows 2.x和3.x 程序的用戶來說,是個大操作系統。雖然它有缺點,
但Windows Me還是繼承了這個困難的任務。另一方面,Windows NT/2000/XP 是用于企業級的。它犧牲了兼容性和大小,來達到高級別的穩
定和健壯。Windows XP 家庭版是Windows XP 的一個版本,用于家庭用戶,它盡力保持了兼容性,但這相對于它的基本目標--穩定性來說
,兼容性還是排在第2位的。
Windows CE并不向后兼容MS-DOS或者Windows.它不是一個為企業級計算設計的全功能的操作系統。相反,Windows CE 是一個輕量級、多線
程的操作系統,它具有可選的圖形用戶接口。它的長處在于它的小尺寸、Win32 API子集和多平臺支持。
Windows CE 也是最初.NET CF版本的基礎,.NET CF是.NET在移動和嵌入式設備上的版本。這個精簡框架使用一個更小的類庫提供了一個同
樣強大的.NET運行時環境,這使得它適合用于電池供電的小型設備上。
Win CE歷史簡介
為了理解Windows CE的歷史,你需要理解操作系統和使用操作系統的產品之間的區別。操作系統是微軟內部一組核心團隊開發的。他們的產品就是操作系統自身。其他團隊,比如開發Pocket PC的團隊,在操作系統即將發布的時候,獲得并使用最新版本的操作系統。這種劃分成兩部分的方式,可能對理解Windows CE是怎么發展的會產生一些混淆。下面讓我們分別看一下這兩部分的歷史--設備和操作系統自身。
設備
首批為Windows CE設計的是手持式“管理器”設備,配有480*240或640*240的屏幕和Chiclet鍵盤(計算機常用的一種鍵盤,有一個很小的矩形鍵盤)。這些設備,稱為手持式PC,在1996年首次面世。在Fall Comdex 97大會上,Windows CE 2.0,一個進行了顯著更新的操作系統版本發布了,和它配套的是類似的更新一些的硬件,具有640*240的橫向屏幕,一些是彩色的,還具有略大一些的鍵盤。
1998年1月,消費電子展覽會上,微軟宣布了兩個平臺,掌上電腦(譯者注:Palm-size PC可以看作Pocket PC的前身,其中使用Windows CE 2.x的稱為Palm-size PC,使用Windows CE 3.x的稱為Pocket PC)和車載PC(譯者注:Auto PC是Windows CE的一種應用模式,多用在一些車載電腦、工業自動控制等場合,可按客戶需要修改輸入輸出方式而不限定使用原有的程序。)。掌上電腦目標直接瞄準了由Palm 0s統治的基于筆式的管理器市場。掌上電腦具有縱向顯示的特點,并配有240*320的屏幕,使用輸入筆來作為輸入方式。但是很不幸,對Windows CE愛好者來說,對這種原始掌上電腦,公眾顯然缺乏熱情。
此后,出現了一種新的迷你膝上式Windows CE設備,配備了觸摸式輸入鍵盤和VGA/Super VGA屏幕。這種設備被稱為H/PC(專業版),電池可使用10小時,并配備了微軟Pocket Office軟件改進版。這種設備中有許多具有內置Modem,一些甚至配備了thenstandard 屏幕,移動軌跡墊或者IBM軌跡球設備。
2000年4月,微軟宣布了Pocket PC,它對老式掌上電腦(Palm-size PC)做了極大的增強。最初的Pocket PC使用預發布的具有更多功能的Windows CE 3.0。Pocket PC的用戶界面也有所不同,具有更加整潔的2緯外觀和修改過的主頁-Today桌面。然而,Pocket PC最重要的特性是極大的改進了Windows CE的性能。微軟做了很多工作來調優Windows CE的性能。這些改進加上更快的CPU,可以讓系統像Pocket 管理器期望的那樣運行的更快。在這種Pocket PC里,摩爾定律使得Windows CE設備可以跨越這條線:現在硬件已經有能力提供Windows CE需要的運算能力了。
手持式PC在2000年時升級到了Windows CE 3.0。雖然這些系統(現在稱為手持式PC2000)在消費領域沒有成功,但在工業領域找到了市場。它憑借相對低的費用,大屏幕和長時間電池能力滿足了這個機會市場。
2001年晚些時候,Pocket PC更新為Pocket PC 2002。這次發布使用了Windows CE3.0的最終發布版本,并做了一些用戶接口方面的改進。同時也增加了Pocket PC Phone版本,在Pocket PC設備中集成了蜂窩電話支持功能。這些設備具有了Pocket PC的功能,也具有蜂窩電話的聯通功能,形成了新一代的幾乎可以始終連接的移動軟件。
微軟的另一組人發布了Smart Display(譯者注:一種具有觸摸屏的無線監視器,可以通過802.11b無線網絡連接到個人計算機,并使用Windows XP Professional操作系統的“Remote Desktop”(遠程桌面)來訪問主機)。它使用Windows CE.NET 4.1系統,具有平板式設備形式,有無線網絡訪問能力,有一個底座可以連接到PC上。當使用底座的時候,它可以做第2個顯示器。當不用底座的時候,它可作為PC的移動顯示器。
2003年春季,Pocket PC團隊發布了升級版的Pocket PC,稱為Pocket PC 2003。系統在用戶接口方面沒有很多變化,但由于是基于Windows CE.NET 4.2,所以在穩定性和性能方面都有了巨大改進。Pocket PC 2003還集成了藍牙支持功能,OEM廠商可以選擇是否包含該功能。
微軟還和OEM廠商合作生產基于Windows CE的蜂窩電話。這些電話中的少部分被稱為Smartphone(智能電話),在2002年末發布了,最初是基于Windows CE 3.0。2003年升級到了Windows CE4.2,并增加了一系列特征,包括 .NET runtime功能。
新設備一直不斷在發布,例如 Media to Go設備,就是使用硬盤來存儲的移動視頻播放器。Windows CE操作系統的強大功能,使應用程序憑借運行在這些設備上的簡單操作系統 超越了系統能力。
操作系統
雖然面向消費者的產品可以不斷產生新聞熱點,但最重要的開發工作仍然在操作系統自身。Windows CE從1.0之日就開始不斷演化,當它還是一個簡單的管理器操作系統時就被寄予厚望。從Windows CE 2.0開始一直持續到今日,微軟不斷發布Windows CE的嵌入式版本,使開發者可以用在他們自定義的硬件上。雖然像Pocket PC等消費平臺占據了宣傳的主體,但對基本操作系統的改進是使諸如Pocket PC和Smartphone之類的設備能夠運做的基礎。
在Fall Comdex 1997大會上,Windows CE 2.0隨著手持式PC 2.0一起發布了。Windows CE 2.0增加了網絡支持,包括Windows 標準網絡功能,支持NDIS miniport驅動模式,以及通用NE2000網絡卡驅動支持。雖然增加的COM被限制在進程內服務,但可以用來支持腳本編寫。引入了新的顯示驅動模式,可以支持像素深度,而不再是Windows CE 1.0中原始的每像素2位了。Windows CE 2.0是Windows CE操作系統中第一個與諸如H/PC等產品分離,獨立發布的版本。開發者可以購買Windows CE 嵌入式工具包(ETK),它可以讓開發者為特殊的硬件平臺定制Windows CE。然而,用過ETK后,開發者會發現,這個產品的功能還沒有達到它所宣稱的目標。
隨著掌上電腦(Palm-size PC)在1998年初發布后,Windows CE又在不斷改進。雖然Windows CE 2.01沒有按ETK形式發布,但它在減少操作系統和應用程序大小方面做的努力還是值得稱道的。在Windows CE 2.01中,C運行時庫從每個EXE和DLL都要綁定的靜態鏈接庫中去掉了,放到了操作系統里。這極大的減小了操作系統和應用程序的大小。
1998年8月,微軟發布了H/PC,配套的發布了操作系統的新版本-2.11版。Windows CE 2.11是從未正式發布的Windows CE 2.1的服務升級包。這一年年末,Windows CE 2.11作為Windows CE平臺的2.11版本,發布給了嵌入式開發者社區。該版本支持改進的對象存儲,允許要存儲的文件大于4M。還增加了對控制臺程序的支持,同時增加了MS-DOS風格的命令行解釋器CMD.exe的Windows CE支持。Windows CE2.11還增加了Fast IR,用于支持IrDA的4M紅外線標準,同時增加了一些特殊功能來支持IP多點傳送。最初的安全概念被引入:設備可以檢查和拒絕裝載沒有被認證的模塊。
Windows CE 2.12也是作為2.1-白樺(Windows CE 2.1的代號)的服務包發布的。這次發布中最大的亮點是一個增強的平臺Builder工具集,它具有一個圖形化的前端界面。用一個新的通知接口調整了系統操作,新的接口將不同的通知功能進行了組合。通知的用戶接口暴露在平臺Builder中,允許嵌入式應用開發者定制通知對話框。微軟基于PC的Internet瀏覽器 IE 4.0也被引入到Windows CE中,稱為Genie-通用IE控件。這個HTML瀏覽器控件完善了簡單小巧的Pocket Internet瀏覽器。微軟消息隊列(MMQ)也被加了進去。Windows CE 2.11中的安全功能“運行/不運行(go/no go)”也增加了“運行,但不信任(go,but don't trust)”的選項。這樣,不被信任的模塊可以運行,但不能調用關鍵功能集,也不能修改注冊表的某些部分。
期待已久的Windows CE 3.0終于在2000年中發布了。這次發布是跟隨同年4月發布的Pocket PC的,它使用了Windows CE 3.0略早一些的內部版本。Windows CE 3.0最大的亮點在它的內核,內核為更好的支持實時功能而做了優化。增強后的內核,支持256個線程優先級(之前的版本是8個),可調整線程周期,可嵌套的中斷服務程序,并減少了內核等待時間。
Windows CE 3.0改進的地方不僅僅在內核上。一個新的COM組件被加入進來,用來完善2.0就有的進程內COM功能。新的組件支持完整的進程外COM和DCOM功能。對象存儲區域也做了改進,可以支持256M RAM了。對象存儲區域里的文件大小限制也提高到了32M/文件。Platform Builder 3.0的附加的軟件包加入了更多的功能,增加了media player控件,提高了多媒體支持。用PPTP,ICS和遠程桌面顯示功能改進了網絡支持。還正式引入了DirectX API。
Windows CE接下來的一個版本,改變的不僅僅是新特性,產品的名字也改了。2001年初,Windows CE.NET 4.0發布了。這個版本里,改變了虛擬內存的管理方式,將每個應用程序的虛擬內存空間擴大了1倍。Windows CE.NET 4.0還增加了新的驅動裝載模式,服務(Services)支持,新的基于文件的注冊選項,藍牙功能,802.11以及1394支持。具有諷刺意味的是,Windows CE.NET 4.0雖然叫.NET,但卻不支持.NET 精簡框架。
2001年末,Windows CE 4.1跟隨Windows CE 4.0之后發布了,增加了IP v6支持,Winsock2支持,一組支持applets的新功能,以及一個叫Power Manager的例子。Windows CE 4.1支持.NET 精簡框架。.NET 運行時庫作為一個快速修復包(QFE),在操作系統發布后提供的。
2003第2季度,Windows CE.NET 4.2發布了。這次升級,提供了很棒的、OEM廠商期待的新特性-在嵌入式系統上支持Pocket PC應用程序。Pocket PC特有的API,比如菜單條、軟輸入法以及其它解釋器特性,被移植到基本操作系統里了。為支持名字空間擴展,瀏覽器Shell被重寫。通過在某些CPU上直接支持硬件分頁表功能,內核性能得到了改進。
因為Windows CE不斷在發展,下個版本的Windows CE正在開發中,一旦有新版本發布的信息,我將更新到我的網站 www.bolingconsulting.com。
為什么你應該讀這本書
《微軟Windows CE程序設計》一書,是為任何想給Windows CE或.NET精簡框架編寫應用程序的人寫的。嵌入式系統程序員為特定的應用使用Windows CE,Windows 程序員對寫或者移植一個已有的Windows程序很感興趣,甚至可管理代碼的開發者都可以用本書里的信息來使他們的工作更容易。
嵌入式系統上的程序員,他們或許沒有Windows 程序員熟悉Win32 API,他們可以讀本書第1部分的內容來熟悉 Windows 編程。雖然這一部分不如《Windows程序設計》(Charles Petzold著)這類書能提供全面的指南,但它的確提供了一些基本信息,使讀者可以讀懂后面的內容。它也為嵌入式系統程序員開發復雜但很有用的Windows CE 程序提供了幫助。
有經驗的Windows 程序員可以通過本書學習Windows CE 和 Windows XP中Win32 API的差異,兩者之間的差異是很顯著的。Windows CE的小巧意味著Win32模式里的很多API不能被支持。Win32 API的某些部分根本不被支持。另一方面,因為Windows CE的特殊性,Windows CE在許多領域擴展了Win32 API,本書將講述這些領域。
本書對使用.NET CF的開發者也很有用。當前的CF在功能上有些缺陷:需要用可管理的應用程序來調用操作系統來執行某個任務。本書對從操作系統可以獲得什么做了很好的指導。書中有一章節會討論在基于Windows CE的設備中開發可管理代碼所涉及的特性。
本書通過例子來進行教學。我專門為本書寫了許多Windows CE示例程序。例子的原代碼列在了書中。源代碼及最終編譯后的程序可以在附書光盤里找到,這些適合許多Windows CE支持的處理器。
書中的示例都是直接用API寫的,即所謂的“Petzold”編程方式。由于本書的目標是教你如何為Windows CE編寫程序,所以示例都避免使用諸如MFC等類庫,應為這會使為Windows CE寫應用程序所涉及的特性產生混亂。一些人可能會認為Windows CE中有MFC,了解Windows CE API的必要性就不那么大了。我并不這么認為,Windows CE API的知識可以使你更有效的使用MFC。我認為真正了解操作系統能夠有效的簡化應用程序的調試。
第3版新內容
第3版本做了比較大的修訂,增加了很多重要的內容,包括Smartphone、藍牙等多個新主題。本書更新了Windows CE.NET 4.2的新特性。增加了新的章節,覆蓋Smartphone和.NET CF。許多章節做了明顯擴充,覆蓋了OBEX、藍牙和服務等主題。另有一些章節做了重新整理以更好的描述主題。
為Smartphone以及Pocket PC Phone的通信特性增加了一章內容,涉及如何為Smartphone 2003設備寫應用程序。還講述了在Smartphone和Pocket PC Phone上,如何通過SMS系統,使用聯接管理器、發送和接收消息功能來寫應用程序。
新增了一章關于.NET CF內容的,涉及如何寫Windows CE上可管理的應用程序。在此之后,集中在.NET CF的特殊類Windows Form的應用程序上。本章涉及的一個重要部分是,當可管理類庫不能提供應用所需的功能時,如何在可管理的代碼中調用不可管理或者本地代碼。
設備之間通信這一章節涉及藍牙和OBEX。藍牙是一個無線通信標準,但坦白地說,在許多文章中并沒有很好的解釋說明。這一章介紹了藍牙技術并提供了一個簡單易懂的使用示例。本章還包括OBEX內容,OBEX是藍牙和紅外線數字聯盟使用的對象交換標準。本章另外一個例子演示了如何用OBEX通過藍牙或者紅外線數據方式去傳送文件到其他設備。
Pocket PC這一章增加了Pocket PC 2003設備的新特性。本書第2版Pocket PC一章中的菜單條例子已經移到了通用控件這一章,這表明出在最新的Windows CE版本中,Pocket PC API將一些功能移到操作系統中。
驅動程序和服務一章也做了更新,涉及Windows CE服務。Windows CE服務在Windows CE .NET 4.0中引入。Windows CE服務程序為編寫后臺運行程序提供了方法,避免為服務使用單獨的進程所帶來的開銷。操作系統還提供超級服務來監控IP端口,并在客戶端連接該端口的時候通知服務。本章提供了一個簡單的Windows CE 服務例子,演示了如何寫服務程序和使用超級服務的特性。
對本書第1版的讀者來說,本書包含了第2版的所有新特性。更新內容涉及Pocket PC和Windows CE設備驅動程序,以及第1版發布后,實現的新的內容管理和線程特性。
.NET精簡框架
一個開發者沒有聽說過微軟的.NET計劃,那他一定是在荒島上。該計劃包括一個運行時環境,把代碼從硬件上隔離開,同時提供一個類型安全的運行時環境以增加安全性。為嵌入式和電池供電的設備編寫了更小一些的運行庫。.NET精簡框架的最初版本運行在有Windows CE的Pocket PC和基于Windows CE.NET 4.1及以后的嵌入式系統上。
嵌入式設備的特殊要求使得在它上面只用可管理的代碼寫應用程序成為一項挑戰。嵌入式應用和一些移動應用要求應用程序和設備緊密的集成在一起。因為運行時庫的特性之一就是將應用和硬件隔離,所以一個嵌入式可管理的應用程序有時需要打破運行時庫的限制,直接訪問某些操作系統的功能。
正如前面所提到的,在精簡框架這一章節里,花費了大量時間來討論如何使可管理的應用程序訪問操作系統。討論涉及到一些技術,比如通過跨越可管理/本地代碼邊界來聚集參數等,當然,在精簡構架里完成這個任務比在桌面應用中更困難。
關于MFC
對于問是否該用MFC開發Windows CE下應用程序的人,過去,我通常的回答是:不要用。老版的windows CE系統加上比較慢的CPU,運行復雜、全功能的MFC應用會帶來很大的壓力。但現在,我不再這么絕對了。新版的Windows CE平臺足夠快,可以用合理的性能運行基于MFC的應用。MFC運行時庫包含在這些設備的ROM中,所以應用程序僅僅是代碼,而不再是代碼加MFC運行時庫。
但正像速度和運行庫都已經加到平臺里去一樣,MFC正逐漸沒落。微軟不再推薦MFC應用開發,取而代之的是.NET開發。所以你應該用MFC開發嗎?我的回答是不要再用MFC開發新項目。對于舊項目,仍然有機會用MFC,但僅僅只是因為這些項目沒有移植到其他開發平臺上
Windows CE開發工具
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -