透過編寫模組化程式碼提高軟體可移植性(轉)

RegisterForBlog發表於2007-08-11
透過編寫模組化程式碼提高軟體可移植性(轉)[@more@]

  簡介

  不錯,不久以前我從 Microsoft 站點訂購了 Bicycle Board Games CD。儘管我可以在我的膝上型電腦上下棋,但如果我能夠將它載入到我的 Microsoft Windows Powered Pocket PC 電話上,以便可以在任何地點、任何時間、任何場合玩這一遊戲,那麼確實會很棒。畢竟,如今那似乎是每個人的銷售方式。但它並不適用於該遊戲。任何地點、任何時間、任何場合 ― 只要我能夠攜帶五磅重的膝上型電腦。

  

  唔,需要實際上可能是發明之母。上述需要 ― 在任何地點、任何時間、任何場合玩遊戲 ― 可能已經引起了與其相應的發明:智慧裝置可程式設計性 (SDP)。SDP 被新增到了 Microsoft Visual Studio .NET 2003(最終測試版)中,並且將在 2003 年春季的發行版中提供。它最終使開發人員可以使用用 Visual C# .NET 或 Microsoft Visual Basic .NET 編寫的託管程式碼為 Pocket PC 2000 或 2002 以及基於 Windows CE .NET 的裝置建立應用程式,並且將來有希望支援更多的語言。

  

  .NET Compact Framework

  Microsoft 被要求為嵌入式裝置建立 Microsoft .NET Compact Framework ― 它是用於桌面的 Microsoft .NET Framework 的子集。之所以需要這樣,是因為 Framework 太大,而嵌入式裝置只有有限的記憶體可用。當第一次使用 Visual Studio .NET 2003 下載託管程式碼應用程式時,Compact Framework 會自動安裝到裝置上的 Program Files.NET Compact Framework 目錄中,以提供庫和執行時支援。還可以從 Microsoft 站點下載和安裝它,以供使用者使用,但沒有針對本文件對此進行測試。

  

  這一切都很完美,但解決一個問題有時會引起另一個問題。如果開發人員希望生成能夠在 .NET Compact Framework 和 .NET Framework 這兩者之上執行的應用程式,則必須非常小心,因為所使用的任何庫通常都必須同時存在於這兩者之中,以便該應用程式能夠在這兩者之上正確地執行。本文件描述了使用 Visual Studio .NET 2003 和 Visual C# .NET 建立可移植應用程式的方法,並且提供了特定於裝置的、帶有共享平臺中立性庫的可下載遊戲應用程式(其中,大多數原始碼和編譯程式碼都可以在 Pocket PC、Windows CE .NET 和桌面計算機上載入),以證明本文件中的概念。

  

  文件動機

  我將提供迄今為止我已經撰寫的、與 Microsoft 有關的文章的年代列表,以幫助說明撰寫本文件的動機。這不僅使我可以對我過去的工作進行大膽的宣傳,而且還將說明對於我目前工作的瘋狂狀態而言,起碼還是有一些條理的。

  

  一年多以前,Microsoft 請我撰寫一篇文章,以幫助開發人員編寫不僅可以在當時的 Pocket PC 上使用,而且可以在那時即將問世的 Windows CE 4.0 上使用的 C++ 應用程式程式碼。雖然最初我不能肯定如何解決這一問題,但我仍然願意接手該專案,這主要是因為我手頭有空閒時間。在擺弄專案和程式碼一段時間以後,我撰寫了 MSDN 文章 ― Building Native C++ Applications that Will Run on Microsoft Pocket PC and Windows CE .NET Platforms,該文章為任何使用 C++ 的 Microsoft 作業系統提供了常規編碼策略。那時,我聽說 Microsoft 將要釋出某種名為 Compact Framework 的東西。我還聽說開發人員將能夠使用 C# 在這些基於 .NET 的新平臺上進行開發。我已經使用 C# 為桌面編寫了幾個簡單的 Windows 窗體和 Web 應用程式,並且我確實喜歡 C#。雖然引用自己的話通常被視為不良的風格,但我仍然在此列出我進行過的“大膽”預測。

  

  當在 2002 年下半年為 Windows CE 釋出 Compact Framework 時,Visual Studio .NET 和 C# 都將成為將來產品開發的良好候選工具。我相信那些不起碼對使用 C# 開發新產品(或許甚至包括產品移植)進行評估的公司將會犯錯誤,因為 C# 已經具有了一個如此豐富的庫,並且按照語言語法的性質來說,它具有高度的可移植性。

  

  它實際上並不是一個如此“大膽”的預測,因為這是顯然的,尤其是在“擺弄”了 C++ 並且意識到編寫可移植程式碼(即使是跨 Microsoft 平臺)並不完全微不足道以後。那時,似乎使用 C# 生成可移植的應用程式很可能要比使用 C++ 容易,即使並未有幸看到將來的工具以及使用 Visual Studio .NET 2003 的最終跨平臺應用程式程式設計介面 (API) 支援。

  

  我想向我第一篇文章中的以下斷言新增支援,即作為現代的程式語言,C# 是 C++ 的良好替代語言。儘管我意識到這些程式語言是等效的,我個人仍然相信從應用程式開發人員的角度來看,C# 在易用性方面優於 Java,但我希望在 C# and Java:Comparing Programming Languages 中儘可能客觀地表達這一觀點。

  

  我在最後一刻被詢問是否能夠為 2003 年 4 月的 Wireless Communications and Computing Solutions 雜誌(以前為 Intel Solutions Journal)撰寫一篇 3,000 字的文章 ― Simple, Standard and Smart Device Programmability。當我詢問主題應該是什麼的時候,我所聽到的全部內容是“智慧裝置的應用程式開發”。當時,我已經安裝了 Visual Studio .NET 2003 並開始使用它來試驗本文中的想法,因此我決定優先為該 Intel 文章撰寫本文件的節略版。在該 Intel 文章中,我生成了一個在桌面以及基於 Windows CE 和基於 Pocket PC 的裝置上執行的非常簡單的可移植溫度轉換窗體,但承諾為即將問世的 MSDN 文章生成一個更為複雜的應用程式。該 Intel 文章在本文件張貼前應該聯機提供。

  

  我之所以決定撰寫本白皮書,主要是因為:C++ 文章中提出的在以後考察 C# 的建議;C# 文章中有關它是一種良好的物件導向程式語言的論點;以及在 Intel 文章中生成一個更為複雜的應用程式的承諾(這些全部都在以前列舉過)。它似乎為一系列文章劃上了句號。還有另外一個動機。Microsoft 最新的 TechInsight 研究了模組化和小記憶體足跡等主題。我猜想將會有幾篇有關使用 Platform Builder 生成 Windows CE 作業系統映像的文章以滿足這一活動要求,但事實上可能很少有應用程式文章將完成這方面的工作。因此,我選擇撰寫本文以便完成上述文章系列,並且嚮應用程式開發人員提供一個“聲音”。

  

  原始目標

  本文的動機推動著本文的原始目標。

  

  1.確定使用 C# 和 Visual Studio .NET 2003 編寫可移植應用程式的可行性。

  

  2.生成概念應用程式的接近於“真實”的證據以測試可行性,並且向讀者提供一些證據以說明它起碼在某些場合下是可能的。

  

  3.試圖確定什麼是“容易”的以及什麼是“困難”的,並且為讀者生成一個問題列表。

  

  4.基於上述目標和我所學到的內容建立最後的建議。

  

  推薦的軟體和硬體

  桌面計算機(滿足下列所有軟體的最低硬體要求)

  

  1.Microsoft Windows XP Professional,並且安裝了 SP1 和所有 Windows 更新

  

  2.Microsoft Visual Studio .NET 2003(最終測試版,如果最終發行版可用則更好)

  

  3.Microsoft ActiveSync 3.6

  

  4.Pocket PC

  

  5.Pocket PC 2000 或 2002

  

  6.基於 Windows CE 的裝置

  

  7.Windows CE 4.1 或更高版本

  

  儘管 Pocket PC 和基於 Windows CE 的裝置是可選的(因為 Visual Studio .NET 2003 具有這兩者的內建模擬器),但最後使用實際的嵌入式硬體來測試真實的應用程式行為總是最好的。我個人使用執行 Windows CE 4.1 的 Siemens SIMpad SL4、執行 Pocket PC 2000 的 HP Jornada Pocket PC 以及 Visual Studio .NET 2003(最終測試版)Pocket PC 模擬器。

  

  使用 Visual Studio .NET 2003 建立專案

  儘管認真構建的 Framework 庫可以在桌面和基於 Windows CE 的裝置之上載入和執行,但建議您在為應用程式匯入生成動態連結庫 (DLL) 時,改為建立智慧裝置庫。為什麼呢?Compact Framework 是桌面版本的子集,而智慧裝置專案使用 Visual Studio .NET 針對該 Compact Framework 進行編譯。因為我們的目標是建立可移植的應用程式,所以採用這種方式可以獲得更多的編譯時幫助,原因是如果一個 API 可供智慧裝置使用,則它通常也可供桌面使用,但反之不然。一個例外是 System.Data.SqlServerCE 名稱空間中的類,它們可供 Compact Framework 使用,但不可供 Framework 使用。該規則還存在其他幾個例外。因為有例外,所以令人遺憾的是,需要同時使用編譯器和聯機幫助。例如,在生成智慧裝置庫時,如果您試圖使用 System.Collections.ArrayList 的 this 索引器,則編譯器應該報錯,因為對於 Compact Framework 不支援該方法。但是,為了在編寫程式碼和編譯之前確定是否可以使用 this 索引器,需要執行下列操作:

  

  1.開啟 Visual Studio .NET 2003 Documentation。

  

  2.單擊 Index 選項卡,然後鍵入 ArrayList class。

  

  3.雙擊 all members 連結。

  

  4.對於 ArrayList 成員皮膚,滾動至 Item Public Properties 單元格。

  

  5.請注意,Supported by the .NET Compact Framework 文字在相應的屬性單元格中不可用。這意味著無法將該呼叫用於跨平臺的可移植程式碼,因為它只能在桌面上使用。

  

  確定 ArrayList 類是否可以在所有需要的平臺上使用

  

  1.開啟 Visual Studio .NET 2003 Documentation.

  

  2.單擊 Index 選項卡。

  

  3.鍵入 ArrayList class。

  

  4.雙擊 about ArrayList class。

  

  5.對於 ArrayList Class 皮膚,滾動至底部的 RequirementsPlatforms 列表。

  

  6. 驗證每個應該執行該應用程式的平臺都在列表中。

  

  當然,如果某個類或方法並非在每個需要的平


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10763080/viewspace-948418/,如需轉載,請註明出處,否則將追究法律責任。

相關文章