Windows CE 是微軟早期推出的嵌入式設備和移動設備的開發運行平台,雖然目前移動端幾乎都是android和ios的天下,但是,在嵌入式設備領域,Windows CE仍然占有一塊地盤。很多用戶希望讓ESFramework通信框架和輕量級的通信引擎StriveEngine能支持Windows CE 客戶端,基於這個需求,前幾個月,我將ESFramework和StriveEngine的客戶端引擎移植到了WinCE平台。
在WinCE平台下,可以使用.NET(Compact Framework),這是個好消息,但是移植的過程還是碰到了很多麻煩,特別是部署WinCE的開發環境就摸索了很久。
一.部署WinCE開發環境
1.安裝VS2005以及SP1
更高的VS版本已經不直接支持WinCE了,VS2005對WinCE開發的支持應該說是最方便的。
2.安裝Windows Embedded CE 6.0
這個比較坑爹,在MS官網居然找不到一個6.0的完整安裝包,可能是因為太老了。轉折N久之后,還是從這個地方批量下載一個個安裝文件,才算湊成了一個完整的安裝程序。
3.安裝ActiveSync 4.5
ActiveSync在baidu搜索就很容易找到下載地址,下載后安裝也還是很順利的。
二.使用WinCE進行開發、調試
在上述的環境准備就緒后,我們就可以開始創建WinCE項目並進行調試了。
1.創建WinCE項目。
使用VS2005創建項目,在左側菜單中,可以選擇“智能設備->WinCE”,其是基於.NET 2.0 Compact Framework的。然后,就可以像開發普通的.NET應用一樣來編寫代碼了。
2.開始調試
(1)啟動ActiveSync。
並點擊“文件”—>“連接設置”,在“允許連接到以下其中一個端口”下選擇“DMA”。
(2)打開仿真設備管理器(VS2005->tools->仿真設備管理器)。
(3)讓模擬器可以聯網。
在仿真設備管理器界面上,可以看到仿真程序列表,在某個列表項上(比如 Pocket PC 2003 SE 仿真程序)右鍵->Connect,連接成功后,再右鍵->cradle。
如此,模擬器相當於與當前電腦位於同一個局域網,如果,服務端程序在當前電腦上運行,那么,模擬器上運行的客戶端程序要連接的是當前電腦的局網IP地址,而不能是“127.0.0.1”。我們需要把模擬器當作一個獨立的電腦設備。
(4)接下來,我們就可以在WinCE程序中設置斷點,進行跟蹤和調試了。
三.關於反射(Reflection)在WinCE上的運行
將ESFramework的某些功能移植到WinCE時,需要使用Reflection來動態獲取和設置object的某個屬性的值,就像這樣:
object val = type.InvokeMember(propertyName, BindingFlags.Default | BindingFlags.GetProperty, null, targetObj, null);
代碼的編寫和編譯都是沒有問題的,但是運行到這句時,會拋出NotSupportException。於是,我換了一個反射的方式:
PropertyInfo pro = type.GetProperty(propertyName); object val = pro.GetValue(targetObj, null);
這樣,居然就能正常運行了,這是個有點奇怪的事情。