移植到Windows CE 的經驗


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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM