移植到Windows CE 的經驗

zhuweisky發表於2013-12-28

  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);

  這樣,居然就能正常執行了,這是個有點奇怪的事情。

 

相關文章